zoukankan      html  css  js  c++  java
  • 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;  
            
        };
        
    };
     
  • 相关阅读:
    DFS复习
    二叉搜索树专题
    二叉树路径问题
    二叉树LCA--leetcode236题
    二叉树创建与前、中、后序遍历
    leetCode--n数之和--哈希表/双指针
    leetCode--单词接龙--BFS
    vue-router简单实现
    Promise的简单实现
    闭包&作用域链&let
  • 原文地址:https://www.cnblogs.com/pipiyan/p/13099185.html
Copyright © 2011-2022 走看看