[LeetCode No.1] 两数之和
题目
题解
题解一:
很简单,直接暴力解法,两层for循环,不多说
题解二(官方解法):
因为是找两数之和为target,且只会有一个解
要在O(n平方)上优化,显然想到循环一次就得找到解
又恰好是两数,则可以利用HashMap的key和value,把数组值作为键,数组键作为value
边循环边判断key中是否存在target-nums[i],若存在 直接找到答案
若不存在则将nums[i]:i存入map
代码
解法一:
public class Solution_1 {
public int[] twoSum(int[] nums, int target) {
for (int i = 0; i < nums.length-1; i++) {
for (int j = i+1 ;j < nums.length; j++){
if (nums[i] + nums[j] == target){
return new int[]{i,j};
}
}
}
return new int[0];
}
}
解法二:
public class Solution_2 {
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> hashMap = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
if (hashMap.containsKey(target - nums[i])){ //若key存在,则找到答案
return new int[] {i, hashMap.get(target - nums[i])} ;
}
hashMap.put(nums[i],i); //不存在则存入
}
return new int[0];
}
}