美文网首页
【LeetCode】1. 两数之和

【LeetCode】1. 两数之和

作者: 尹小芃槑 | 来源:发表于2018-12-07 10:33 被阅读0次

LeetCode 题目地址:https://leetcode-cn.com/problems/two-sum/description/

题目

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

JavaScript:

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {

};

解答

方法一

获取一个元素之后,向后查找是否有与其相对应的数字,如果没有,找下一个元素。如果有,则返回。

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    let len = nums.length;
    for(let i = 0; i < len; i++) {
        for (let j = i + 1; j < len; j++) {
            if(nums[i] + nums[j] === target) {
                return [i,j];
                break;
            }
        }
    }
    return [];
}

方法二

获取一个元素a,我们又知道了两数之和target,所以我们可以通过target - a 的计算,得到我们要找的另外一个数字,这个时候我们在数组中查找就好。

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    let n;
    let x;
    let len = nums.length - 1;
    for(let i = 0; i < len; i++) {
        n = target - nums[i]; // 获取满足条件的另一个数字
        x = nums.indexOf(n, i + 1); // 在nums数组中的第 i+1个元素之后,查找是否存在n
        if(x > -1) {
            return [i, x];
        }
    }
    return [];
};

方法三

方法二 中的indexOf其实也算是遍历了一遍数组,遍历数组是很浪费时间的,那么我们有没有什么办法可以快速的查找数据呢?

为了更快速的查找改元素,我们定义一个对象obj,将key定义为数组元素,value定义为该数组元素在数组中定义的下标,例如:

let nums = [2, 7, 11, 15];
将 nums 改写成 obj
let obj = {
    "2" : 0,
    "7" : 1,
    "11" : 2,
    "15" : 3
}

假设我们要数字11在nums数组中所在的位置,只需obj["11"]即可获取。

解题代码如下:

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    let len = nums.length;
    let n = {};
    for(let i = 0; i < len; i++) {
        if (n[ target - nums[i] ] !== undefined){
            return [n[ target-nums[i] ], i];
        }
        n[ nums[i] ] = i;
    }
    return [];
};

转载请注明:转自尹小芃槑

相关文章

  • 【LeetCode通关全记录】1. 两数之和

    【LeetCode通关全记录】1. 两数之和 题目地址:1. 两数之和[https://leetcode-cn.c...

  • LeetCode(1. 两数之和)

    算法描述 : 算法实现 : Java实现 : Python实现

  • leetcode 1. 两数之和

    leetcode 1. 两数之和题目: 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假设每...

  • 1.两数之和 LeetCode

  • [LeetCode] 1. 两数之和

    给定一个整数数列,找出其中和为特定值的那两个数。 你可以假设每个输入都只会有一种答案,同样的元素不能被重用。示例:...

  • LeetCode 1. 两数之和

    题目链接:https://leetcode-cn.com/problems/two-sum/description...

  • LeetCode 1. 两数之和

    题目描述 题解 暴力法 时间复杂度为,空间复杂度为。 哈希表法 时间复杂度为,空间复杂度为。 哈希表法进阶 时间复...

  • [LeetCode] 1. 两数之和

    前言 从今天开始,将会开启我的 LeetCode 打卡之路。为了能让打卡坚持下去,就给自己设定了用博客来记录打卡过...

  • LeetCode 1. 两数之和

    题目: 题目地址:https://leetcode-cn.com/problems/two-sum/ 问题描述: ...

  • Leetcode 1.两数之和

    题:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他...

网友评论

      本文标题:【LeetCode】1. 两数之和

      本文链接:https://www.haomeiwen.com/subject/jnnzcqtx.html