LeetCode 真题 1.两数之和

                                 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;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • HTML 5 HTML5概述 因特网上的信息是以网页的形式展示给用户的,因此网页是网络信息传递的载体。网页文件是用...
    阿啊阿吖丁阅读 4,083评论 0 0
  • 题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并...
    玩大神的简书阅读 309评论 0 0
  • 寂寂蓼莪篇,潇潇夜雨连。 断魂留宿影,追梦记心田。 正路当尊老,蓬门莫畏难。 亲恩难数尽,百善孝为先。 诗中蓼莪取...
    古愚阅读 262评论 0 0
  • 梅姨因脱欧上任,又因脱欧下任。 如今,脱欧已经成了全世界都在看着的笑话和闹剧,她曾经的凌云壮志,也成为了很多人对她...
    parkmyn阅读 864评论 0 0
  • 1. 安装JDK jdk下载地址:http://www.oracle.com/technetwork/java/j...
    meryin阅读 2,151评论 0 2