LeetCode-两数和-JavaScript写法

111 阅读1分钟
  1. 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

    你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

    示例:

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

    因为 nums[0] + nums[1] = 2 + 7 = 9

    所以返回 [0, 1]

  2. 暴力解法

    var twoSum = function(nums, target) {    var len = nums.length;    for(let i = 0;i < len;i++){        for(let j = i+1;j<len; j++){            var sum = nums[i]+nums[j];            if(sum == target){                return [i,j];             }        }    }};var nums = [2, 7, 11, 15], target = 18;console.log(twoSum(nums,target));

2、两遍哈希表

var nums = [2, 7, 11, 15], target = 18;console.log(twoSum(nums,target));function twoSum(nums,target){    var newMap = new Map();    for(let i = 0 ; i < nums.length ; i++){        newMap.set(nums[i],i);    }    for(let j = 0 ; j < nums.length; j++){        var del = target-nums[j];        if(newMap.has(del) && newMap.get(del)!==j){            return [j,newMap.get(del)];        }    }}

3、一遍哈希表

function twoSum(nums,target){    var newMap = new Map();    var len = nums.length;    for(let i = 0 ; i < len ; i++){        var del = target-nums[i];        if( newMap.has(del) && newMap.get(del)!==i ){            return [newMap.get(del),i]        }        newMap.set(nums[i],i);    }}

3、数组方法indexOf

function twoSum(nums,target){    var len = nums.length;    for(let i = 0; i<len; i++){        var del = target-nums[i];        var index = nums.indexOf(del);        if(index >-1 && index !== i){            return [i,index];        }    }}


总结:

推荐哈希表方式

以下为leetcode代码执行效果:

依次是数组法->两遍哈希表->暴力法->一边哈希表