给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回他们的数组下标。
示例1:
输入:nums=[2,7,11,15] target =9
输出:[0,1]
方法一:
思路:我们可以通过反复遍历,先让外层循环代表第一个数,随后内层循环代表第二个数,第一个数不变,找是否有第二个数与第一个数相加等于target,如果没有,那么外层循环继续,从而内层循环也继续,直到找到相加为target值得那两个数,注意内层循环=外层循环加1,因为不能是本身的一个数,相加等于target
<script>
// *********************第一种***************************
let nums = [3, 3];
function getSum(nums, target) {
for (let i = 0; i < nums.length; i++) {
for (let j = i + 1; j < nums.length; j++) {
if (nums[i] + nums[j] == target) return [i, j];
}
}
}
let num = getSum(nums, 6);
console.log(num);
// *********************第二种***************************
// 思路:
let nums = [3, 3];
let target = 6;
function getSum(nums, target) {
map = new Map();
for (let i = 0; i < nums.length; i++) {
x = target - nums[i];
if (map.has(x)) return [map.get(x), i];
}
map.set(nums[i], i);
}
</script>
方法二:
思路:可以通过target值,用逆向解法,用target减去某个元素值,然后来判断map中是否有相同的值
注: 用js中的map对象map(数组元素值,坐标)
map.has(key)->map中是否存在key返回boolean
map.get(key)->返回map中的value值
// *********************第二种***************************
let nums = [3, 3];
let target = 6;
function getSum(nums, target) {
map = new Map();
for (let i = 0; i < nums.length; i++) {
x = target - nums[i];
if (map.has(x)) return [map.get(x), i];
}
map.set(nums[i], i);
}