https://leetcode-cn.com/problems/two-sum/
2、分析本题是给了一个int数组nums和一个整数数字target,求出在nums中,和为target的两个元素的下标。
凡数组、必遍历。 这个问题有两种解法
思路就是通过双层for循环,把结果循环出来。复杂度O(n²)
public int[] twoSum(int[] nums, int target) {
for(int i=nums.length-1;i>=0;i--){
for(int j=1;j<=i;j++){
if(nums[i]+nums[i-j]==target){
return new int[]{i-j,i};
}
}
}
return null;
}
2、HashMap解法
思路就是:循环时,判断map中有没有key为target与nums[i]的差值,没有的话,把当前的nums[i]和他的下标i分别当做key和value放入map。有的话 说明nums[i]和map中的该元素和为target,就返回map中的value,以及i,即和为target的两个元素的下标。复杂度O(n)
public int[] twoSum(int[] nums, int target) {
Map map = new HashMap<>();
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);
}
return null;
}



