题目:给出一个整型数组 numbers 和一个目标值 target,请在数组中找出两个加起来等于目标值的数的下标,返回的下标按升序排列。
首先想到的是最简单的双重循环:
function twoSum(numbers, target) {
// write code here
let arr = [];
for (let i = 0; i < numbers.length; i++) {
for (let j = i+1; j < numbers.length; j++) {
if (numbers[i] + numbers[j] === target) {
arr.push(i + 1);
arr.push(j + 1);
return arr;
}
}
}
}
然后报错:执行时间过长。一看用例,好家伙,成百上千个九位数十位数组成的数组,执行时间能不长吗。
想起leetcode上有一模一样的题,不限制时间复杂度。不得不感叹牛客有时候比leetcode严。
以下是正确思路:
function twoSum(numbers, target) {
let arr=[]
for(let i=0;i
这个方法的重点和巧妙之处在于:
把前面的元素作为数组下标保存起来,这样后面的元素与target的差可以通过查找数组元素的方式比对出来。注意点:以下标形式存入数组时其值必须为该元素在原数组中的位置i,否则后面取不到他的位置。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)