给出一个整型数组 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)
}
}