leetcode第一题
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1]
最初是的遍历两次,把两个相同的值进行去比较获得答案,可以通过速度较慢。
//一开始的个人做法
class Solution {
public int[] twoSum(int[] nums, int target) {
for(int i; 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 null;
}
}
第二个使用的错误的方法,例题是对的,必须是从小到大排序,如果是乱序的话使用Arrays.sort();方法结果也是和题目不符。
但这个效率也比第一个高。
class Solution {
public int[] twoSum(int[] nums, int target) {
int i = 0;
int j = nums.length-1;
while(i < j){
int sum = nums[i] + nums[j];
if(sum == target){
return new int [] {i,j};
}else if(sum < target){
i++;
}else{
j--;
}
}
return null;
}
}
最后是leetcode中的讨论区的答案
数组为[2, 7, 11, 15]
第一次存入的map是(7,0)
第二次发现有7的key值,此时result[0] = map.get(cur) (此时map.get(cur) ==0)
result[1] = 1;
class Solution {
public int[] twoSum(int[] nums, int target) {
//先创建一个容量为2的数组
int [] result = new int [2];
Map<Integer,Integer> = new HashMap<>();
for(int i = 0; i < nums.length-1; i++){
int cur = nums[i];
//这里搞出来个差值,其实差值是在没找到之后添加到map里面的。
int toFind = target - cur;
//如果发现之前需要这个差值,那就找index。
if(map.containsKey(cur)){
result[0] = map.get(cur); //获取当前的value值 所以此时的value =0;
result[1] = i; // i = 1;
return result;
}
//如果没有,就put到map里面
else{
map.put(toFind, i); //第一次的value -> i=0;
}
}
return null;
}
}