当前位置: 首页 > news >正文

(哈希查找)leetcode128. 最长连续序列

文章目录

  • 一、题目
    • 1、题目描述
    • 2、基础框架
    • 3、原题链接
  • 二、解题报告
    • 1、思路分析
    • 2、时间复杂度
    • 3、代码详解
  • 三、本题小知识

一、题目

1、题目描述

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

请你设计并实现时间复杂度为 O(n) 的算法解决此问题。

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

示例 2:
输入:nums = [0,3,7,2,5,8,4,6,0,1]
输出:9

2、基础框架

  • C++版本给出的基础框架如下:

3、原题链接

https://leetcode.cn/problems/longest-consecutive-sequence/

二、解题报告

1、思路分析

  (1)(1)(1)首先对数组去重,然后遍历去重后的数组,遍历元素为num时,查找数组中是否存在num+1, num+2…。如果一直找到num+x,而num+x+1不存在时,则以num为起点的连续序列长度为x+1。
  (2)(2)(2)如果每个元素都当作起点查找的话,会有很多重复。比如数组中存在num-1,那么num,num+1…都是属于以num-1为起点的序列的,没必要从num,num+1…等为起点计数。
  (3)(3)(3)所以,判断元素num是否可以作为起点,只要判断数组中是否存在num-1。不存在的话就可以作为起点。
  (4)(4)(4)为了降低查找的时间复杂度,需要用哈希表存储数组。哈希表查找的时间复杂度为O(1).

2、时间复杂度

时间复杂度为O(n),空间复杂度为O(n)

3、代码详解

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

三、本题小知识

1.java中Set的使用
添加元素:set.add()
查找元素是否存在:set.contains(value)
遍历set:for(T val : set)

http://www.lryc.cn/news/25729.html

相关文章:

  • js中splice方法和slice方法
  • c++ argparse
  • 内大892复试真题16年
  • 面试题 05.02. 二进制数转字符串
  • MySQL数据更新操作
  • C# 封装
  • 每日学术速递3.2
  • PCBA方案设计——LCD体重电子秤方案
  • 动态规划--背包问题
  • 从0开始学python -45
  • 如何用BurpSuite抓取手机数据包
  • Linux性能监控工具iostat解析
  • 3D可视化大屏制作真的那么难?没有好用的软件解决吗?
  • C语言|文件读写,代码运行后留下“记忆”
  • 【2023unity游戏制作-mango的冒险】-6.关卡设计
  • JavaScript高级 浏览器WebStorage
  • $ 3 :类型强制转换场景、printf函数
  • 视频会议系统异常中断故障分析案例
  • 什么是文件传输中台?
  • 设计模式-代理模式(Java)
  • 如何处理负面评论?利用负面评论发挥优势
  • 一个JAVA程序员必备的技能有哪些?知道这些帮你快速升职加薪
  • DHTMLX Suite 8.0 重大发布,新增更多新主题、热图图表、辅助功能支持功能
  • [华为OD机试 ] Linux发行版的数量(C++ Java JS Python)
  • HydroD 实用教程(五)Morsion Model
  • 成功解决xshell7会话窗口只能显示一个的问题
  • Spring security 个人理解
  • 线性表 顺序表数组
  • 从WebRtc学习RTP协议
  • centos7 配置samba