1. 数组numbers == null 及numbers.length == 0, 而不是用numbers[]
2. HashMap<Integer, Integer>而不是<int, int>
3. 先找有没有余数, 没有则将自身加入到哈希表里, 有的话直接返回自身的位置和余数的位置(如果先找有没有自身, 则不能确定有没有余数)
4. for循环里的return能跳出方法, 而break只能跳出循环, 方法里的剩余语句还要走(代码里for循环里的return若在则返回第一个符合的答案, 若不在则返回最后一个符合的答案)
5. if语句特别注意的情况, 若不写else而用if(存在余数), 则此时在同一个循环里就会用两次自身(若目标为自身两倍时)
public class Solution { /* * @param numbers : An array of Integer * @param target : target = numbers[index1] + numbers[index2] * @return : [index1 + 1, index2 + 1] (index1 < index2) */ public int[] twoSum(int[] numbers, int target) { int[] arr = new int[2]; if(numbers == null) return arr; if(numbers.length == 0) return arr; HashMap<Integer, Integer> map = new HashMap<Integer, Integer>(); for(int i = 0; i < numbers.length; i++){ if(!map.containsKey(target - numbers[i])){ map.put(numbers[i], i + 1); } else{ arr[0] = map.get(target - numbers[i]); arr[1] = i + 1; //return arr; } } return arr; // write your code here } }
浙公网安备 33010602011771号