给定1个整数数组,找目标值(2个数的和),返回其下标。
注意:数组中可存在重复的数字。
测试用例:
输入:nums = [3,3], target = 6
输出:[0,1]
输入:nums = [3,2,4], target = 6
输出:[1,2]
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
将数组存在HashMap里,然后循环1次数组,计算后去找字典里的目标值。 O(n)
注意数组中重复的值,需要将i和index(map)进行对比,确定不是同一个值才进行返回。
哈希表法适合频繁去list里找某一个值的情况,将多次遍历list,变为去map里面查找,从而降低时间复杂度。
class Solution {
public int[] twoSum(int[] nums, int target) {
HashMap<Integer,Integer> numsMap = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
if(numsMap.containsKey(target - nums[i])){
int index = numsMap.get(target - nums[i]);
if (index != i){
//说明不是同一个值
return new int[]{i, index};
}
}
numsMap.put(nums[i], i);
}
return new int[]{};
}
}
原文:https://www.cnblogs.com/wfer/p/14652524.html