20200606:最长连续序列(leetcode128)

最长连续序列

  • 题目
  • 思路与算法
  • 代码实现
  • 复杂度分析

题目

20200606:最长连续序列(leetcode128)_第1张图片

思路与算法

  1. 本题没什么思路问题,主要是这个时间复杂度的约束。想到用set来实现。
  2. 注意先去重,也是一个想到set的角度
  3. 去重后找相邻的数,包括比当前数大的和比当前数小的。
  4. 先看当前set中是否包含num-1,不包含则开始往上找,从num+1开始找,计数君计数即可。同理先确认不包含num+1,往下找也可以。

代码实现

class Solution {
    public int longestConsecutive(int[] nums) {
        int res = 0;
        // 使用set去重
        HashSet<Integer> nums_set = new HashSet<>();
        for (int num : nums) {
            nums_set.add(num);
        }

        // 再次遍历,寻找比当前数字小1的数字

        for (int num : nums_set) {
            // 如果当前set中不包含num-1这个数字
            if (!nums_set.contains(num - 1)) {
                // 则获取当前数字,并且将计数君加1
                int curNum = num;
                int count = 0;
                
                // 如果不包含num-1,则从num+1开始找,并用计数君计数即可。
                while (nums_set.contains(curNum)) {
                    curNum++;
                    count++;
                }

                // 获取最大计数君
                res = Math.max(res,count);
            }
        }
        return res;
    }
}

复杂度分析

满足O(N)的时间复杂度要求。

你可能感兴趣的:(leetcode学习记录篇)