leetcode-01 TwoSum

来源:互联网 发布:四川省旅游 2016 数据 编辑:程序博客网 时间:2024/06/06 08:26

leetcode-01 TwoSum

Given nums = [2, 7, 11, 15], target = 9,Because nums[0] + nums[1] = 2 + 7 = 9,return [0, 1].
刚看到题目就想到了嵌套for循环,但是性能太差,不通过,代码如下
var twoSum = function(nums, target) {    for(var i = 0; i < nums.length - 1; i++) {        for(var j = i + 1; j < nums.length; j++) {            if(nums[i] + nums[j] === target) {                // result.push(i, j)                // return result;                return new Array(i, j);            }        }    }};
优化如下
var twoSum = function(nums, target) {    // 复制数组(深拷贝) 用于查询结果索引    var temp = nums.slice(0);    // 对数组进行排序    nums = nums.sort(function(a, b) {return a - b;));    // 拿到开始和结束的索引值    var i = 0;    var j = nums.length - 1;    // 循环结束条件    while(nums[i] + nums[j] != target) {        // 大于目标值结束索引向左移动        if(nums[i] + nums[j] > target) {            j--;        }else {            i++;        }    }    // 这里已经获取到目标元素    // 通过目标元素获取原索引值    i = temp.indexOf(nums[i]);    j = temp.lastIndexOf(nums[j]);    return new Array(i, j);};
0 0
原创粉丝点击