给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
解题思路:主要思路是通过差值来寻找。
1.用while循环从后往前遍历。
2.每次遍历先pop最后一个值,再通过indexOf来查找是否有对应的差,pop的好处是为了防止两个数相等。
3.如果有对应的值,索引就是indexOf和数组的长度。
4.indexof关于-1:arr1.indexOf(arr[i]) = -1 等于-1就是说arr1不包含arr[i]这个值,一般会用到数组去重。
5.pop用法:pop() 方法用于删除并返回数组的最后一个元素。
代码如下:
var Sum = function(nums, target) {
let i = nums.length;
while(i > 1) {
let last = nums.pop();
if (nums.indexOf(target - last) >-1) { //不等于-1说明存在该元素
return [nums.indexOf(target - last), nums.length]
}
i--
}
};
indexof()用法: 去重
但是:按照官方的对indexOf()的定义,它的作用是返回某个字符串在另一个字符串中首次出现的位置。
<script>
var arr = [1, 2, 3, 4, 4, 67, 89, 67];
var s = [];
for (var i = 0; i < arr.length; i++) {
if (s.indexOf(arr[i]) == -1) {
s.push(arr[i])
}
}
console.log(s)
</script>