【JS攻略Leetcode】No.1.Two Sum(两数之和)

引言:用Js攻略leetcode中的算法,将会介绍自己的思路和注意点,一边学习一边愉快刷题呀。

问题:

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
实例:
给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]

思考:

  1. 为了提高算法效率,先开始想数组进行排序后,找到小于target的最大值再进行查找第二个值。后来发现:不对呀!我们要返回的是在原数组的顺序,假设nums = [3,6,3], target = 6, 排序后位置信息就丢失啦。
  2. 然后就想用es6新增的Map数据结构,结果发现map键值是覆盖的,如下图:


    image.png
  3. 所以,最后我还是采用了暴力法:遍历每个元素 x,并查找是否存在一个值与 target - x相等的目标元素。
  4. 相关问题:数组进行排序,想用sort()语法,结果发现两点需要注意:一是数组sort改变了原数组,解决方法用slice复制一个新array:

numSort = num.slice(0).sort();

二是排序是按照字符串一位一位进行比较的,解决方法sort中定义排序函数:

num.slice(0).sort((a,b)=>a-b)

image.png

代码:

var twoSum = function(nums, target) {
    var index=[];
    for(var i = nums.length-1; i > 0; i--) {
        for(var j = i - 1; j >= 0; j--) {
            if(nums[j] + nums[i] == target) {
                index.push(j);
                index.push(i);
                return index;
            }
        }
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • <center>#1 Two Sum</center> link Description:Given an arr...
    铛铛铛clark阅读 2,252评论 0 3
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,791评论 0 33
  • 海明威说过,一个人可以被毁灭,但绝不会被打败,这句话甚至被写入了我们的教科书,于是在这么气势雄壮的语气背后...
    几开阅读 760评论 1 1
  • 若没有深爱 请别故作深情 我怕辜负了岁月 打扰了爱情 若没有在乎 也别绅士的牵手 我怕手心的温度 再也没有紧握的温...
    Jane1116阅读 221评论 3 0
  • golang1.5实现了自举. 意思就是用go语言写的go语言. 这样想编译安装go就不好办了...因为你都没有g...
    radio阅读 922评论 0 0