1.两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
给定 nums = [2, 7, 11, 15], target = 9。因为 nums[0] + nums[1] = 2 + 7 = 9。所以返回 [0, 1]

思路

  利用for循环嵌套,遍历同一个数组。(太暴力了~~~)

var twoSum = function(nums, target) {
    var arry = [];
    for(var i=0;i < nums.length;i++){
        for(var j = i+1;j < nums.length;j++){
            if(target === nums[i]+nums[j]){
                arry = arry.concat(i,j);
                return arry
            }; 
        };
    };
    
};
其他解法:

思路:利用哈希表

哈希表常常用来存储key-value的数据,由于我们最终是要获取目标元素索引,所以代码实现中直接使用数组元素作为位置映射,用于存储当前元素索引。其次,巧妙通过var dif = target - nums[i]分别获取目标值与当前遍历元素的差值,如果这个差值作为哈希表的索引能访问到有效元素,那么说明当前遍历的i与arry[dif](拿到的是元素在nums中的索引)就是要找的索引。

var twoSum = function(nums, target) {
    var arry = [];
    for(var i=0;i < nums.length;i++){
        var dif = target - nums[i];
        if (arry[dif] != undefined){
            return [arry[dif], i];
        };
        arry[nums[i]] = i; 
        //key-value 对应     
    };    
};
优化第二版 将数组改为字典提升运行时间
var twoSum = function(nums, target) {
    var dict = {};
    for(var i=0;i < nums.length;i++){
        var diff = target - nums[i];
        if (diff in dict){
            return [dict[diff], i];
        };
        dict[nums[i]] = i;  
        
    };
    
};

 

 
posted @ 2020-06-12 14:27  举个栗子^-^  阅读(163)  评论(0编辑  收藏  举报