题目:给定一个整数数组,和一个目标整数,要求返回数组中2两个数的下标,这两个数相加等于target
第一个解题思路:两次循环数组,依次相加,找出相加等于target的两个数组值,时间复杂度 N的2次方。
class Solution {
public int[] twoSum(int[] nums, int target) {
if(nums==null || nums.length < 2){
return null;
}
for(int i=0;i<nums.length;i++){
for(int j=i+1;j<nums.length;j++){
if(nums[i]+nums[j]==target){
return new int[]{i,j};
}
}
}
return null;
}
}
运行结果 Runtime: 51 ms, faster than 24.12% of Java online submissions for Two Sum.
Memory Usage: 39.4 MB, less than 43.89% of Java online submissions for Two Sum.
第二个解题思路:空间换时间的思路,数组里的两个值 n1+n2=target,那么我们依次遍历数据,用Map记录n1的值和下标,当 target - sums[i]的结果在map中存在时,那么数组中存在的值ni+sums[i]==target 我们就找到了n1和n2.
class Solution {
public int[] twoSum(int[] nums, int target) {
if(nums==null || nums.length < 2){
return null;
}
Map<Integer,Integer> map=new HashMap<Integer,Integer>();
for(int i=0;i<nums.length;i++){
int tra=target-nums[i];
if(map.containsKey(tra)){
return new int[]{map.get(tra),i};
}
map.put(nums[i],i);
}
return null;
}
}
Runtime: 1 ms, faster than 99.68% of Java online submissions for Two Sum.
Memory Usage: 39.1 MB, less than 83.47% of Java online submissions for Two Sum.
欢迎大家评论,有没有更好的解题思路。