题目:
求一个数组两数之和等于target,返回两个数的index
解题思路
用一个map存 key=num[i] value = index key存数值,value存索引
1,把数值的值和index放在map的v和k
private static int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i = 0; i < nums.length; i++) {
map.put(nums[i], i);
}
throw new IllegalArgumentException();
}
2,获取遍历当前元素的另一半(也就是target减去当前元素)
private static int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i = 0; i < nums.length; i++) {
int num = target - nums[i];
map.put(nums[i], i);
}
throw new IllegalArgumentException();
}
3,判断这个另一半是否已经在map里了,如果存在,则返回另一半的index和当前index,不存在则往map里面放,,注意这里返回结果时候顺序不重要,但是因为map里面有建议把map里面存在的index放前面
private static int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i = 0; i < nums.length; i++) {
int num = target - nums[i];
if (map.containsKey(num)) {
return new int[]{map.get(num), i};
}
map.put(nums[i], i);
}
throw new IllegalArgumentException();
}