刷题记录8: 128. 最长连续序列

LeetCode刷题记录
------分割线------
刷题记录8: 128. 最长连续序列


文章目录

  • 前言
  • 一、题目内容
  • 二、自己的思路
  • 三、自己的代码实现
  • 四、更好的算法
  • 总结


前言

想到什么写什么:

做题。


提示:以下是本篇文章正文内容,下面案例可供参考

一、题目内容

刷题记录8: 128. 最长连续序列_第1张图片

二、自己的思路

	这题如果不加限制其实不难,对其做个排序,然后再做判断即可,难度在于在O(n)的复杂度内,其实就是对每个数字是查询判断一次,不做重复判断,那么我们就要判断这个数是否是判断开始的第一个数,是判断的起点就开始往下判断,不是起点就跳过,每次记录最大长度,即可。

三、自己的代码实现

class Solution {
public int longestConsecutive(int[] nums) {
    Map map = new HashMap<>();
    for(int k:nums){
        map.put(k,1);
    }
    int maxLength = 0;
    for(int i=0;i=length?maxLength:length;
    }
    return maxLength;
}
}

刷题记录8: 128. 最长连续序列_第2张图片

四、更好的算法

这个答案是从第二个高答中的回复找到的,因为自己的算法时间和空间都太大了,所以在学习答案的时候,看到了第二个高赞回答,但其中有个写法逻辑有一点点不完美,觉得应该有更好的回答,果然在答案的回复中有个兄弟写了这个更好的答案,时间和空间大大提升。之前也想过用这种方法,只不过自己当初想的是map里面最初存key还是对应的数组,value想着放初始长度1,但在后续判断中需要对1进行单独判断并且存在重复计算的逻辑,增加了复杂度,所以还是没有完成这种想法。现在看这个答案,value最初放的是数组的值,记录对应key可以放的最大值,再用个减法得到长度,也做到了一个数只判断一次的效果。
刷题记录8: 128. 最长连续序列_第3张图片

总结

愿早睡早起。

你可能感兴趣的:(leetcode,java,算法)