问题
给定一个数组和一个目标值,获取相加之合为目标值的数组中两个元素的下标并输出。
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
思路
1)通过哈希表记录数据,key为元素值,value为该元素在数组中的下标,以便于后续获取。
2)遍历数组,判断目标值减去当前元素值是否为null。
3)如果不为null,代表map中存在与当前元素值相加等于目标值的元素。,则返回当前元素下标 与 map中对应key的value值。
4)如果不为null,代表map中不存在与当前元素值相加等于目标值的元素,则将当前元素值做为key,下标作为value,放入map中。
实现
public class TwoSum {
public static void main(String[] args) {
int[] nums = new int[]{2,7,11,15};
int target = 9;
int[] result = twoSum(nums,target);
System.out.println(Arrays.toString(result));
}
private static int[] twoSum(int[] nums, int target) {
/**
* 定义一个map用于存放数据 key为元素值,value为元素下标
* 遍历数组
* 如果map.get(target-nums[i]) != null. 代表该值存在,则返回数组[nums[i],map.get(target-nums[i])]
* 否则,将当前遍历得到的值放入map中
*/
Map<Integer,Integer> map = new HashMap<>(16);
for (int i=0;i<nums.length;i++){
if (map.get(target-nums[i]) != null){
return new int[]{i,map.get(target-nums[i])};
}
map.put(nums[i],i);
}
return new int[]{0};
}
}
image.png
网友评论