美文网首页用Js攻略Leetcode
【JS攻略Leetcode】No.1.Two Sum(两数之和)

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

作者: mooory | 来源:发表于2018-08-22 10:06 被阅读0次

    引言:用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;
                }
            }
        }
    };
    

    相关文章

      网友评论

        本文标题:【JS攻略Leetcode】No.1.Two Sum(两数之和)

        本文链接:https://www.haomeiwen.com/subject/ojjeiftx.html