zoukankan      html  css  js  c++  java
  • leetcode 128

    给定一个未排序的整数数组,找出最长连续序列的长度。
    要求算法的时间复杂度为 O(n)。
    示例
    输入: [100, 4, 200, 1, 3, 2]
    输出: 4
    解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。
    //感想:感觉动态规划好像做不了,看着像是要用到hash的数据结构,又觉得要用桶排序,正好跟hash还有点关系的感觉,就用桶排序,但是不可以,因为这个数据太大了,会出现Integer.MIN_VALUE,Integer.MAX_VALUE;有的测试用例通过不了,就看了下答案,发现答案是用hash做的。

    //思路:对于这种又时间复杂度要求的题目,但是排序又不行的,一般用hash,hash存储起来是On的复杂度,再查找的话就是O1了,但是这里面一般肯定还是有东西的,不然复杂度肯定还是大于On的,因为你需要遍历存储的hash结构是On,但是查找肯定还要遍历所以肯定要优化,不然复杂度肯定超了。

    这里的优化主要在:比如说有1,2,3,4 这四个连续的数字查找,你查找了1,往后走到2,3,4,所以当你查找4的时候就往后走一步,发现存在就不要查4了,因为之前有的所以肯定会带上这个4,所以就不要查了,这一步的优化做了就可以了。

     1 class Solution {
     2     public int longestConsecutive(int[] nums) {
     3         if(nums==null||nums.length==0)
     4             return 0;
     5         HashSet<Integer> set=new HashSet<>();
     6         for(int i=0;i<nums.length;i++)
     7             set.add(nums[i]);
     8         int longestlen=0;
     9         for(int num:set)
    10         {
    11             if(set.contains(num-1))
    12                 continue;
    13             int current=1;
    14             while(set.contains(num+1))
    15             {
    16                 current++;
    17                 num++;
    18             }
    19             longestlen=Math.max(current,longestlen);
    20         }
    21         return longestlen;
    22     }
    23 }
  • 相关阅读:
    黑盒测试用例设计-功能图法和场景法(八)
    黑盒测试用例设计-正交试验方法(七)
    Linux 的档案权限与目录配置
    maven常用技巧
    SQL Server登录 18456错误
    How do I remove javascript validation from my eclipse project?
    解决Cannot change version of project facet Dynamic web module to 2.5
    An error occurred while filtering resources
    Java Servlet完全教程
    eclipse 使用指南
  • 原文地址:https://www.cnblogs.com/cold-windy/p/11791187.html
Copyright © 2011-2022 走看看