LeetCode 真题 1.两数之和

2019-10-29  本文已影响0人  暖男Gatsby

                                 LeetCode  真题 1.两数之和       

描述:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]。

诚然此题如果纯粹用双重遍历暴力解决,但是这样做又怎么能对得起一个极客的职业素养呢。那么如何解决掉它?

这种寻找目标的问题如果要找到对应的目标,只是一昧的穷举,那么运算将会无穷大,那么在已知目标值的前提下求取目标值所在数组的索引。显而易见,用散列表是最佳选择。

可以先用哈希表Map绑定key,value键值对,然后遍历元素的时候,计算出目标值,用目标值匹配哈希表,为空则不存在,否之则有目标值,并输出对应的元素下标。

var tosum = function(nums,target){

var map = new Map();

var collect = [];

for(var i=0;i<nums.length;i++){

    var a = target - nums[i];                       //获取目标值,每个元素木不知不同

    if(map.has(a)&&map.get(a)!=i){    //若哈希表包含此元素的目标值,且目标值对应的索引不等于i(即找的对象不等于元素本身)

        collect.push(map.get(a));     //获取这两个索引

        collect.push(i);

    }

    map.set(nums[i],i);                    //添加键值对

    return collect;

}

上一篇下一篇

猜你喜欢

热点阅读