题目
1.两数之和
题目描述
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/two-sum
我的思路
可以创建一个哈希表存放<值,下标>,找到相对应的值即"target-当前数的差"在map表中存在,输出下标。
- 建立一个int[]来存放将要输出的下标,因为已知会输出两个数字的下标,所以可以指定大小为2
- 找target-nums[i]这个差是否存在,存在的话直接跳出循环
arr[0]=map.get(target-nums[i]);//对应差的值(下标)
arr[1]=i;//当前值(下标)
用到了hashmap的containsKey() 方法
检查 hashMap 中是否存在指定的 key 对应的映射关系。
代码
public static int[] twoSum(int[] nums, int target) {
//结果是两个数字的下标,所以大小为2
int[] arr = new int[2];
Map<Integer,Integer> map = new HashMap();
for (int i = 0;i<nums.length;i++) {
//找target-nums[i]这个差是否存在,存在的话直接跳出循环
if (map.containsKey(target-nums[i])){
arr[0]=map.get(target-nums[i]);
arr[1]=i;
return arr;
}
//不存在的话,map.put(值,下标)
map.put(nums[i],i);
}
//不然就返回空的arr
return arr;
}
测试
public static void main(String[] args){
System.out.println(Arrays.toString(twoSum(new int[]{2,7,11,15},9)));
}