twoSum问题
/**
*给定 nums = [2, 7, 11, 15], target = 9
*因为 nums[0] + nums[1] = 2 + 7 = 9
*所以返回 [0, 1]
*/
通过这题了解了HashMap,
boolean containsKey(object key)用来检查map中是否包含要查询的key的信息
boolean containsValue(object value)用来检查map中是否包含要查询的value的信息
package LeetCode;
import java.util.HashMap;
import java.util.Map;
public class TwoSum {
public static int[] twoSum(int[] nums, int target) {
Map <Integer,Integer> map = new HashMap<>();
for(int i=0;i<nums.length;i++){
int temp = target-nums[i];
if(map.containsKey(temp)) { //containsKey判断是否存在map中
return new int[] {map.get(temp),i};
}
map.put(nums[i],i); //加索引存入map
}
return new int[] {-1,-1};
}
public static void main(String[] args) {
int nums[]= {1,3,5,2,7};
int[] res = twoSum(nums,8);
System.out.println(res[0]+" "+res[1]);
}
}
这几天看到公众号大牛对这个题的剖析,让我感觉自己还是没有总结好
他提到:现在的问题里面数据是无序的,那么除了用暴力求解外,还可以学到用HashMap、HashSet集合的方式;
如果题目是有序的数据,你又有什么好的想法呢?有序,就应该尝试想到双指针,一个尾,一个头,不够或者过大,移动两个指针来找。
int []twoSum(int[] nums,int target){
int left = 0,right = nums.length-1;
while(left<right){
int sum = nums[left]+nums[right];
if(sum==target) return new int[] {left,right};
else if(sum>target)
right--;
else if(sum<target)
left++;
}
return new int{-1,-1};
}
至于HashMap和HashSet的实现,等我学了再写出来记录