[LeetCode]128. 最长连续序列(java实现)hashset

[LeetCode]128. 最长连续序列(java实现)hashset

  • 1. 题目
  • 2. 读题(需要重点注意的东西)
  • 3. 解法
  • 4. 可能有帮助的前置习题
  • 5. 所用到的数据结构与算法思想
  • 6. 总结

1. 题目

[LeetCode]128. 最长连续序列(java实现)hashset_第1张图片
在这里插入图片描述

2. 读题(需要重点注意的东西)

思路(hashset):

  1. 将所有数字放入hashset,遍历hashset中的元素

  2. 向后枚举相邻的数字(即不断加一),判断后面一个数字是否在哈希表中

由于要求时间复杂度为O(n),因此要对上述过程进行优化

为了避免重复枚举序列,因此只对序列的起始数字向后枚举,因此需要判断一下当前数是否是序列的起始数

如何判断当前数x是不是某一个序列的起点呢?
只需要判断x-1是否存在即可,若x-1存在,那么说明这个数前面还有连续的数,即这个数不是起点。

3. 解法

---------------------------------------------------解法---------------------------------------------------

class Solution {
    public int longestConsecutive(int[] nums) {
        Set<Integer> hashset = new HashSet<>();
        for(int num : nums) hashset.add(num);
        int res = 0;
        for(int i = 0;i < nums.length;i++){
            int x = nums[i];
            if(!hashset.contains(x-1)){
                int y = x;
                while(hashset.contains(y+1)) y++;
                res = Math.max(res,y - x + 1);
            }
        }
        return res;
    }
}

可能存在的问题:

4. 可能有帮助的前置习题

5. 所用到的数据结构与算法思想

  • Java数据结构—HashMap(哈希表及其基本操作)(含hashset)

6. 总结

你可能感兴趣的:(LeetCode深度解析,java,leetcode,算法)