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 }
  • 相关阅读:
    排序算法之冒泡排序
    hadoop程序启动
    开播小记
    3.3面向对象封装案例1摆家具
    3.2面向对象基础语法
    3.1类和对象
    2.12函数进阶
    2.11变量的引用_可变不可变类型_局部变量和全局变量
    2.10第二章综合应用_名片管理系统
    2.8函数基础
  • 原文地址:https://www.cnblogs.com/cold-windy/p/11791187.html
Copyright © 2011-2022 走看看