ARTS-01

Algorithm

Two Sum 两数之和(leetcode #1)

“平生不识 TwoSum,刷尽 LeetCode 也枉然。”

1
2
3
4
5
6
7
8
9
10
Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

Example:

Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].

解题思路
本题的要求是找到两数之和等于 target 的以这两个数的下表为元素的数组,初步的想法应该用HashMap 存下遍历 nums数组的下表与对应的值,并且判断当 用target减去 已存在的数得到数组中另一个数时,满足题目的要求,返回他们的下标。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
public int[] twoSum(int[] nums, int target) {
HashMap<Integer, Integer> map = new HashMap<>();
int[] result = new int[2];
for (int i = 0; i < nums.length; i++) {
if (map.containsKey(target - nums[i])) {
result[0] = map.get(target - nums[i]);
result[1] = i;
break;
}
map.put(nums[i], i);
}
return result;
}
}

Reading

Top Signs of an Over-Experienced Programmer
https://medium.com/better-programming/top-signs-of-an-over-experienced-programmer-22bbe0b57663

只要我们还是programmer 我们的重心还是要放到programming 与 engineering 上,过度地考虑需求是否合理,项目是否能满足用户需求等并不是我们需要考虑的重心。我们需要避免不必要的refactoring,以尽可能perfect地实现需求为目标,深入到code engineering才是。

Tip

本周在做新项目时又重新用到了 hibernate mybatis 和 jdbcTemplate。下面针对这些工具我个人的一些看法

  • hibernate 虽然比较方便,结合Spring Data JPA 可以非常方便的写出crud逻辑,但缺点也非常明显,就是相对其他两个来说太不灵活了,如果不小心开启了自动生成数据库的配置,自动生成的外键够让你难受的了。
  • mybatis 使用起来中规中矩,但还是不够灵活,仿佛掉进了维护数据表间关系的坑里。
  • jdbcTemplate 我用得最顺手,特别是 NamedParameterJdbcTemplate,通过手动拼接SQL实现复杂的逻辑非常好用,还不必像在PreparedStatement中一样数问号🤣

Share

本周分享的文章是来自 阿里云云栖社区 的一篇关于HashMap的文章
由阿里巴巴Java开发规约HashMap条目引发的故事
https://zhuanlan.zhihu.com/p/30360734