leetcode 1 two sum
给定一个数组和目标数,若数组中有两个数相加等于目标数,给出这两个数的下标
方法暴力搜索
最简单直观的方法,但是耗时长。
class Solution {
public int[] twoSum(int[] nums, int target) {
boolean k=false;
int[] a=new int[2];
for(int i=0;i<nums.length;i++){
for(int j=0;j<nums.length;j++){
if(nums[i]+nums[j]==target&&i!=j){
a[0]=i;
a[1]=j;
k=true;
break;
}
}
if(k){
break;
}
}
return a;
}
}
使用map,将数组中的数加入map中,边加入,边判断目标数减加入的数是否在map中。大幅降低了时间复杂度。
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] result = new int[2];
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i = 0; i < nums.length; i++) {
if (map.containsKey(target - nums[i])) {
result[1] = i;
result[0] = map.get(target - nums[i]);
return result;
}
map.put(nums[i], i);
}
return result;
}
}
也有先根据目标数大小,缩小数组中符合的数的范围,再进行搜索的方法,比较费脑子。