[LeetCode] Two Sum 两数之和

给定一个整数字符串,找出和为特定数字的两个数。
两数和(twoSum)这个函数应该返回和为目标值的两个数字的下标。
可以假设每个输入都会只有一种答案,并且同样的元素不能被重用。
示例:

给定 nums = [2, 7, 11, 15], target = 9,
因为 nums[0] + nums[1] = 2 + 7 = 9,
返回 [0, 1].

思路:通过循环先把最后的第一个元素和它的index放入hash里,用t1表示当前target和nums[i]差的value,如果value是undefined,则把i元素及其index放入hash里,继续循环。如果t1的值不为undefined,并且t1和i不相等,就说明,在之前的t2的时候,已经把t1的key值写入了hash里面,说明已经有了差的index值,则把i写入result里,然后比较i和t1的大小,决定它俩的顺序(毕竟只有一种答案)

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    let i = 0,
        len = nums.length,
        hash = {},
        res = [],
        t1, t2;
    while(i < len) {
        t2 = len - i - 1;
        hash[nums[t2]] = t2;
        t1 = hash[target - nums[i]];
        if(t1 !== undefined && t1 !== i){
            res.push(i);
            (i > t1) ? res.unshift(t1) : res.push(t1);
            break;
        }
        hash[nums[i]] = i;
        i++
    }
    return res;
};

思路和上面那个类似,就是把数组放到map里,上面是放到hash里,但是这个比上面那个简单一些。

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
const twoSum = (nums, target) => {
    const len = nums.length
    const map = {}
    for (let i = 0; i < len; i++) {
        const cur = nums[i]
        const j = map[target - cur]
        if (j != null) {
            return [j, i]
        }
        map[cur] = i
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值