您的位置:首页 > Web前端 > JavaScript

LeetCode刷题记: 两数相加

2017-03-29 20:59 567 查看

写在前面:

为了提升算法水平与熟悉JavaScript基本功能,决定去LeetCode做做算法题,这个网站支持多种语言,当然包括最火热的JavaScript啦,我是按照页面默认排序写的,无视难度,简单的自己写,然后Google更优答案,困难的自己好久都想不出的话就直接Google答案

1. Two Sum (两数相加)

题目

给定一个整数数组,返回两个数的index,使它们相加为一个特定的值

样例

提供: nums = [2, 7, 11, 15], target = 9,

因为 nums[0] + nums[1] = 2 + 7 = 9,
所以 return [0, 1].


思路

为了降低复杂度,使用JavaScript的内置对象 Map或者使用纯数组来进行操作

样例一

/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
* 这种先生成查找表的方法不能使用数组进行存储,因为如果是输入的nums有重复的数的话,比如 [1,4,4,5],结果会是这样:
*  1 -> 0
*  4 -> 2
*  5 -> 3
*/
var twoSum = function (nums, target) {
// 用于记录数组nums的长度
const length = nums.length;
// 实例化一个Map对象
let hash = new Map();
let index = 0;
for (index = 0; index < length; index++) {
// 设置 hashMap 的 <key, value>,用于后面比较取值
hash.set(nums[index], index);
}

// 遍历数组中的每一个数,求出另一个与其相加可以满足条件的数的值,存储在 @param numToFind 中
let numToFind;
for( index = 0; index < length; index++) {
numToFind = target - nums[index];
// 查询 hashMap 中对应的值是否有对应的index,而且不能是当前数的下标(防止出现 3 + 3 = 6,但数组nums中只有一个3这样的情况)
if (hash.has(numToFind) && index !== hash.get(numToFind)) {
return [index, hash.get(numToFind)];
}
}
};


样例二

当然,你也可以在一个循环中完成

/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
var len = nums.length;
var exist = [];
for(var i = 0; i < len; i++){
if (exist[target - nums[i]] !== undefined){
return [exist[target-nums[i]], i];
}
exist[nums[i]] = i;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 算法 javascript