【leetcode 16】1. 两数之和
方法一:两层for循环方法
class Solution {
public int[] twoSum(int[] nums, int target) {
int len=nums.length;
int[] res=new int[2];
for(int i=0;i<len;i++){
for(int j=i+1;j<len;j++){
if(nums[i]+nums[j]==target){
res[0]=i;
res[1]=j;
}
}
}
return res;
}
}
什么时候使用哈希法,当我们需要查询一个元素是否出现过,或者一个元素是否在集合里的时候,就要第一时间想到哈希法。
本题需要一个集合来存放我们遍历过的元素,然后在遍历数组的时候去询问这个集合,某元素是否遍历过,也就是 是否出现在这个集合。
那么我们就应该想到使用哈希法了。
因为本题,我们不仅要知道元素有没有遍历过,还要知道这个元素对应的下标,需要使用 key value结构来存放,key来存元素,value来存下标,那么使用map正合适。
方法二:使用哈希表
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] res=new int[2];
if(nums==null||nums.length==0){
return res;
}
Map<Integer,Integer>map=new HashMap<>();
for(int i=0;i<nums.length;i++){
int tmp=target-nums[i];
if(map.containsKey(tmp)){
res[0]=i;
res[1]=map.get(tmp);
break;
}
map.put(nums[i],i);
}
return res;
}
}
原文地址:https://blog.csdn.net/weixin_45780075/article/details/145144429
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!