要求:
给定一个整数数组 和一个整数目标值 ,在该数组中找出和为目标值 的那两个整数,并返回它们的数组下标
假设给定数组 nums[]= [1,2,3,4,6] 目标值target= 8
做法:
①使用嵌套的for循环语句来做
/**遍历情况
* 外层 0 1
* 内层 1 1++ 2 2++ 不能大于数组长度
* 每一次遍历都将数组中下标对应的两个数相加,如果符合就返回,不符合就继续遍历
*/
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};
}
}
}
②使用for循环+map.containsKey()方法
/**
* 每遍历数组的一个数,就用目标值减去这个数获得的值作为key,
* 再用containsKey来比较看map中有没有这个key
* 如果不存在这个key,那么就以这个下标对应的数组值为k,下标为v放进map
* 如果存在,那么就返回当前下标,还有通过这个key获取到的值
*/
Map<Integer,Integer> map = new HashMap<>();
for(int i=0;i<nums.length;i++){
if(map.containsKey(target-nums[i])){
return new int[]{map.get(target-nums[i]),i};
}
map.put(nums[i],i);
//使用map的另一个方式,差别不大
//if(map.containsKey(nums[i])){
//return new int[]{map.get(nums[i]),i};
//}
//map.put(target-nums[i],i);
}