前言:

每道题附带动态示意图,提供java、python两种语言答案,力求提供leetcode最优解。

描述:

给定一个未排序的整数数组,找出最长连续序列的长度。

要求算法的时间复杂度为 O(n)。

示例:

输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。

思路:

  首先,我们先来看一个简单的例子:序列123 序列 56,插入4,求连续序列长度。

  

  很容易得出结论,答案是6,那么这个6是怎么来的呢?6 = len(1,2,3) + len(5,6) + 1。

  当4插入的时候,我们关心的是3,5,而当序列1,2,3,4,5,6一旦形成,那么元素2,3,4,5我们将不会关心,因为无论新加入序列的元素取何值,都不会和元素2,3,4,5组合成连续序列。

  那么我们是否可以将连续序列的长度,当作一种状态,绑定在连续序列的首尾元素上?

此时,当元素7插入序列后,组成的最大连续序列就是4 = 2+1+1,因此我们可以分析出,该问题的dp方程是 dp[i] = dp[i - 1] + dp[i+1]

我们可以借助散列表来简化时间复杂度。

图解:

java:

class Solution {
public int longestConsecutive(int[] nums) {
int len = nums.length;
int max = 0;
if (len == 0) {
return max;
}
HashMap<Integer, Integer> map = new HashMap<>(len);
for (int i = 0; i < len; i++) {
if (!map.keySet().contains(nums[i])) {
Integer before = map.getOrDefault(nums[i] - 1, 0);
Integer after = map.getOrDefault(nums[i] + 1, 0);
int value = before + after + 1;
max = Math.max(value, max); map.put(nums[i] - before, value); map.put(nums[i] + after, value);
}
}
return max;
}
}

结果:

python:

class Solution(object):
def longestConsecutive(self, nums):
hash_dict = dict() max_length = 0
for num in nums:
if num not in hash_dict:
left = hash_dict.get(num - 1, 0)
right = hash_dict.get(num + 1, 0) cur_length = 1 + left + right
if cur_length > max_length:
max_length = cur_length hash_dict[num] = cur_length
hash_dict[num - left] = cur_length
hash_dict[num + right] = cur_length return max_length

结果:

图解leetcode —— 128. 最长连续序列的更多相关文章

  1. Java实现 LeetCode 128 最长连续序列

    128. 最长连续序列 给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为 O(n). 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连 ...

  2. LeetCode 128. 最长连续序列(Longest Consecutive Sequence)

    题目描述 给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为 O(n). 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 [1 ...

  3. leetcode 128最长连续序列

    方法一:使用快排: //排序法,时间O(nlogn),使用STL,只是验证一下思想,非正解: class Solution { public: int longestConsecutive(vecto ...

  4. 【LeetCode】128. 最长连续序列

    题目 给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为O(n). 示例: 输入:[100, 4, 200, 1, 3, 2] 输出:4 解释:最长连续序列是[1, 2, 3, ...

  5. leetcode.哈希表.128最长连续序列-Java

    1. 具体题目 给定一个未排序的整数数组,找出最长连续序列的长度.要求算法的时间复杂度为 O(n). 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 ...

  6. leetcode 128. 最长连续子序列

    题目描述: 给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为 O(n). 示例: 输入:[100, 4, 200, 1, 3, 2] 输出:4 即最长的连续序列为 [1,2, ...

  7. 【LeetCode】最长连续序列

    [问题]给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为 O(n). 示例: 输入: [, , , , , ] 输出: 解释: 最长连续序列是 [, , , ].它的长度为 ...

  8. [LeetCode] 128. Longest Consecutive Sequence 求最长连续序列

    Given an unsorted array of integers, find the length of the longest consecutive elements sequence. F ...

  9. [leetcode]128. Longest Consecutive Sequence最长连续序列

    Given an unsorted array of integers, find the length of the longest consecutive elements sequence. Y ...

随机推荐

  1. python3 之 迭代器与生成器

    迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,知道所有的元素被访问完结束. 迭代器只能往前不会后 ...

  2. 【Powershell 教程】学习资源汇总

    [Powershell 教程]学习资源汇总 一.书籍教程 1.<Windows PowerShell实战指南>第3版 作者:[美] Don,Jones(道·琼斯),Jeffery,Hick ...

  3. 【CKB.DEV 茶话会】如何在 CKB 上实现用户自定义 Token

    本贴内容主要来自于 CKB.DEV 茶话会第一期,本期主题是:如何在 CKB 上实现 UDT,分享人是:Cipher 王博. 茶话会现场视频: https://v.qq.com/x/page/x303 ...

  4. 大型情感剧集Selenium:6_selenium中的免密登陆与cookie操作 #华为云·寻找黑马程序员#

    欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...

  5. 【Python成长之路】从 零做网站开发 -- 基于Flask和JQuery,实现表格管理平台

    [写在前面] 你要开发网站?    嗯.. 会Flask吗?    什么东西,没听过... 会JQuery吗?    是python的库吗 ? 那你会什么?    我会F12打开网站 好吧,那我们来写 ...

  6. luogu P1044 栈

    题目背景 栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表. 栈有两种最重要的操作,即poppop(从栈顶弹出一个元素)和pushpush(将一个元素进栈). 栈的重要性 ...

  7. BZOJ1500 [NOI2005]维修数列(Splay tree)

    [Submit][Status][Discuss] Description 请写一个程序,要求维护一个数列,支持以下 6 种操作: 请注意,格式栏 中的下划线‘ _ ’表示实际输入文件中的空格 Inp ...

  8. AtCoder-3856

    An adult game master and N children are playing a game on an ice rink. The game consists of K rounds ...

  9. UESTC-1964命运石之门(类似SPFA的BFS)

    命运石之门 Time Limit: 1000 MS     Memory Limit: 256 MB Submit Status "这一切都是命运石之门的选择!" 凶真博士发明了能 ...

  10. Python的面试题

    (1)怎么把一个字符串转换成整型? 可以使用int函数  如 int('3')   结果由字符串'3'变为整型3 (2)python内建数据类型有哪些? int .bool. str.list. ru ...