zoukankan      html  css  js  c++  java
  • leetcode算法题01

    最近求职需要重新刷算法题,从今天开始每天至少做一个leatcode的题
    如果有更好的算法或者换了语言也会更新

    • 题目:

    给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

    你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

    示例:

    给定 nums = [2, 7, 11, 15], target = 9

    因为 nums[0] + nums[1] = 2 + 7 = 9
    所以返回 [0, 1]

    • 解法 :

    官方给了三种解法:

    • 是暴力循环,想的简单,易于理解,但是如果数组里元素很多的话就很卡,复杂度分析:
      时间复杂度:O(n^2) ), 对于每个元素,我们试图通过遍历数组的其余部分来寻找它所对应的目标元素,这将耗费 O(n) 的时间。因此时间复杂度为 O(n^2)。
      空间复杂度:O(1)。

    • 是用哈希表循环两遍,第一遍是录入哈希表,第二遍再循环找一遍,
      复杂度分析:

      时间复杂度:O(n), 我们把包含有 nn 个元素的列表遍历两次。由于哈希表将查找时间缩短到 O(1),所以时间复杂度为 O(n)。

      空间复杂度:O(n), 所需的额外空间取决于哈希表中存储的元素数量,该表中存储了 n个元素。

    • 是用哈希表循环一遍,在第一遍时一边录入一边排查,之前面试也碰到过这道题,当时面试官给的解法就是这种,相对理想
      复杂度分析
      时间复杂度:O(n), 我们只遍历了包含有 nn 个元素的列表一次。在表中进行的每次查找只花费 O(1) 的时间。
      空间复杂度:O(n), 所需的额外空间取决于哈希表中存储的元素数量,该表最多需要存储 n 个元素。

    • 代码

    var twoSum = function(nums, target) {
        var result=[];
        var test=new hashTable();
        // var i=0;
       nums.forEach(function(item,index){
               
          // console.log("success" +index);
           if(test.containsKey(target-item)&&item==(target-item)){
                result.push(test.getValue(target-item),index);
             test.remove(target-item);
             //  console.log("same");
           }     
          else {
                test.add(item,index);
                 if(test.containsKey(target-item)&&index!==test.getValue(target-item)){
                        // result.push([test[item],test[target-item]]);
                         result.push(test.getValue(target-item),test.getValue(item));
                        test.remove(item);
                        test.remove(target-item);
                   //    console.log("delete");
                    }
                        }
           });
        return result;       
    };
    
    • 心得

    题不难,主要是练习通过哈希表的排序是怎么用js实现的,哈希表的搜索简单快捷,实现起来也不难。之前没用js做过。
    在调试的过程中出现了2回问题

    • 刚开始我只是想把数组的值作为key,序号作为value,没有考虑当两个值都是一样的时候哈希表会覆盖,报了一回错,加了个if判断了一下,就解决了

    • 数据范围考虑不全。没有考虑给的和等于他本身时的情况,报了一回错,加了个if判断了一下,就解决了。

    • 更新

    • 未来想用python实现一下,算法方面应该没什么可优化的了。

  • 相关阅读:
    HDFS 常用Shell命令
    Hadoop单点伪分布模式安装
    部署及更新应用
    Linux云服务器下Tomcat部署超详细
    Android基础知识总结系列(一)——Android 系统框架
    Linux下的暴力密码在线破解工具Hydra安装及其组件安装-使用
    Luogu1501 Tree Ⅱ
    C#中Dictionary的用法(转)
    Lua协程
    SSH Secure Shell Client
  • 原文地址:https://www.cnblogs.com/dadaochangcun/p/9806574.html
Copyright © 2011-2022 走看看