给出一个整型数组 numbers 和一个目标值 target,请在数组中找出两个加起来等于目标值的数的下标,返回的下标按升序排列。
(注:返回的数组下标从1开始算起,保证target一定可以由数组里面2个数字相加得到)
数据范围:,,
要求:空间复杂度 ,时间复杂度
[3,2,4],6
[2,3]
因为 2+4=6 ,而 2的下标为2 , 4的下标为3 ,又因为 下标2 < 下标3 ,所以返回[2,3]
[20,70,110,150],90
[1,2]
20+70=90
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param numbers int整型一维数组 * @param target int整型 * @return int整型一维数组 */ function twoSum( numbers , target ) { // write code here /** * find (target - numbers[idx]) in numbers */ let arr = [0,0] for (let i=0; i < numbers.length; i++) { let cv = numbers[i] if (target < cv) continue // 跳过 let nT = target - cv for (let j = i + 1; j < numbers.length; j++) { if (numbers[j] == nT) { arr[0] = i + 1 arr[1] = j + 1 return arr } } } return arr } module.exports = { twoSum : twoSum };
function twoSum( numbers , target ) { // write code here const map = new Map(); for (let i = 0; i < numbers.length; i++) { const complement = target - numbers[i]; if (map.has(complement)) { return [map.get(complement)+1, i+1]; } map.set(numbers[i], i); } return []; } module.exports = { twoSum : twoSum };
/** * * @param numbers int整型一维数组 * @param target int整型 * @return int整型一维数组 */ function twoSum( numbers , target ) { const ans = []; //存放结果 let map = new Map(); //map初始化 for(let i=0;i<numbers.length;i++){ //遍历数组 if(map.has(target - numbers[i])){ //搜索是否存在可以相加为target的数,map.has(key)如果数组中有返回true,如果没有返回false ans[0]=map.get(target - numbers[i])+1; //找到后存入ans中 ans[1]=i+1; break; }else{ map.set(numbers[i],i); //如果没找到,存入map中 } } return ans; } module.exports = { twoSum : twoSum };
一开始我在想如何从map中寻找呢,里面一开始没有存任何numbers[]的数据,但是如果没找到,就把该数据存入map中,那么此时的map相当于另一个numbers,这样key也是正确的。
/** * * @param numbers int整型一维数组 * @param target int整型 * @return int整型一维数组 */ function twoSum( numbers , target ) { const map = new Map() for(let i = 0;i < numbers.length;i++){ if(map.get(target - numbers[i]) !== undefined){ return [map.get(target - numbers[i])+1,i+1] } map.set(numbers[i],i) } } module.exports = { twoSum : twoSum };
function twoSum( numbers , target ) { // write code here let a let b numbers.forEach((v,i) => { numbers.forEach((val,ind) => { if(val + v === target && i !== ind){ a = i + 1 b = ind + 1 } }) }) return [a,b].sort((ts,cs) => ts - cs ) }
function twoSum( numbers , target ) { // write code here //定义一个hash表用来存放数据 var map=new Map() //获取数组的长度 var len=numbers.length //遍历数组 for(var i=0;i<len;i++) { //将目标数字减去数组中数字,得到差 var num=target-numbers[i] //如果哈希表中没有这个差,将这个数字放进去 if(!map.has(num)) { map.set(numbers[i],i+1) } else{ //如果有差,则获取到数字的下标 return [map.get(num),i+1] } } }
function twoSum( numbers , target ) { // write code here var len = numbers.length; var result = new Array(2); for(var i = 0; i < len; i++){ for(var j = i+1; j < len; j++){ if(numbers[i] + numbers[j] == target){ result[0] = i+1; result[1] = j+1; } } } return result; }
function twoSum( numbers , target ) { // write code here let arr=numbers let map=new Map() for(let i=0;i<arr.length;i++){ console.log(map.has(target-arr[i]),i,map,target-arr[i],target,arr[i]) if(map.has(target-arr[i]) ){ return [map.get(target-arr[i])+1,i+1] //这里有点坑,*** } map.set(arr[i],i) } }