给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
示例:
给定 nums = \[2, 7, 11, 15\], target = 9
因为 nums\[0\] + nums\[1\] = 2 + 7 = 9
所以返回 \[0, 1\]
题目原地址:
https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/1/array/29/
可以把写好的代码去这里提交,验证是否通过。
/**
\* 首先想到的肯定是拿第一个元素与后面的依次加,看是否等于目标值,
\* 然后再第二个、第三个...
*/
public int\[\] twoSum1(int\[\] nums, int target) {
for (int i = 0; i < nums.length - 1; i++) {
for (int j = i + 1; j < nums.length; j++) {
if (nums\[j\] == target - nums\[i\]) {
return new int\[\] {i, j};
}
}
}
return new int\[\]{0,0};
}
/**
\* 把数值作为 key,它的下标作为 value
\* 遍历数组,判断 map 是否含有这个目标值-当前数值,
\* 有直接返回,没有的话放到map里面
*
\* 所以以后写代码,如果有双层 for 循环,首先考虑一下能否用 map 替换一层
*/
public int\[\] twoSum2(int\[\] nums, int target) {
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);
}
return new int\[\]{0,0};
}
这个好像有点简单