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

【LeetCode每日一题】——128.最长连续序列

文章目录

  • 一【题目类别】
  • 二【题目难度】
  • 三【题目编号】
  • 四【题目描述】
  • 五【题目示例】
  • 六【题目提示】
  • 七【解题思路】
  • 八【时间频度】
  • 九【代码实现】
  • 十【提交结果】

一【题目类别】

  • 哈希表

二【题目难度】

  • 中等

三【题目编号】

  • 128.最长连续序列

四【题目描述】

  • 给定一个未排序的整数数组 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

六【题目提示】

  • 0 < = n u m s . l e n g t h < = 1 0 5 0 <= nums.length <= 10^5 0<=nums.length<=105
  • − 1 0 9 < = n u m s [ i ] < = 1 0 9 -10^9 <= nums[i] <= 10^9 109<=nums[i]<=109

七【解题思路】

  • 利用哈希表的思想
  • 首先将数组中的元素加入哈希表中,这么做的目的是去重,并且为了方便后续的计算
  • 然后遍历哈希表中的每个元素,计算从这个元素开始的连续数组,通过哈希表进行扫描就可以
  • 这样我们就只使用了 O ( n ) O(n) O(n)的时间复杂度解决这个问题
  • 最后返回结果即可

八【时间频度】

  • 时间复杂度: O ( n ) O(n) O(n) n n n为传入的数组的长度
  • 空间复杂度: O ( n ) O(n) O(n) n n n为传入的数组的长度

九【代码实现】

  1. Java语言版
class Solution {public int longestConsecutive(int[] nums) {HashSet<Integer> map = new HashSet<>();for(int i = 0;i < nums.length;i++){map.add(nums[i]);}int res = 0;for(int num : map){if(!map.contains(num - 1)){int curNum = num;int curLen = 1;while(map.contains(curNum + 1)){curNum += 1;curLen += 1;}res = Math.max(res, curLen);}}return res;}
}
  1. C语言版
struct HashNode
{int key;UT_hash_handle hh;
};int longestConsecutive(int* nums, int numsSize)
{struct HashNode* map = NULL;struct HashNode* tempNode = NULL;for(int i = 0;i < numsSize;i++){HASH_FIND_INT(map, &nums[i], tempNode);if(tempNode == NULL){struct HashNode* newNode = (struct HashNode*)malloc(sizeof(struct HashNode));newNode->key = nums[i];HASH_ADD_INT(map, key, newNode);}}struct HashNode *val, *temp;int res = 0;HASH_ITER(hh, map, val, temp){if(val != NULL){int lastVal = val->key - 1;HASH_FIND_INT(map, &lastVal, tempNode);if(tempNode == NULL){int curNum = val->key + 1;int curLen = 1;HASH_FIND_INT(map, &curNum, tempNode);while(tempNode != NULL){curNum += 1;curLen += 1;HASH_FIND_INT(map, &curNum, tempNode);}res = fmax(res, curLen);}}}HASH_ITER(hh, map, val, temp){HASH_DEL(map, val);free(val);}return res;
}
  1. Python语言版
class Solution:def longestConsecutive(self, nums: List[int]) -> int:map = set(nums)res = 0for num in map:if num - 1 not in map:curNum = numcurLen = 1while curNum + 1 in map:curNum += 1curLen += 1res = max(res, curLen)return res
  1. C++语言版
class Solution {
public:int longestConsecutive(vector<int>& nums) {unordered_set<int> map;for(int i = 0;i < nums.size();i++){map.insert(nums[i]);}int res = 0;for(const int& num : map){if(!map.count(num - 1)){int curNum = num;int curLen = 1;while(map.count(curNum + 1)){curNum += 1;curLen += 1;}res = max(res, curLen);}}return res;}
};

十【提交结果】

  1. Java语言版
    在这里插入图片描述

  2. C语言版
    在这里插入图片描述

  3. Python语言版
    在这里插入图片描述

  4. C++语言版
    在这里插入图片描述

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

相关文章:

  • Redis_缓存1_缓存类型
  • 模拟 枚举
  • 【实操】2023年npm组件库的创建发布流程
  • 缓存设计的典型方案
  • SQL笔记
  • UHPC的疲劳计算——兼论ModelCode2010的适用性
  • 关于elementui的input的autocomplete的使用
  • 即然利用反射机制可以破坏单例模式,有什么方法避免呢?
  • 【IDEA问题】下载不了源代码
  • 代码随想录第四十八天
  • 书写自动智慧:探索Python文本分类器的开发与应用:支持二分类、多分类、多标签分类、多层级分类和Kmeans聚类
  • 前端Webpack面试题
  • LabVIEW使用边缘检测技术实现彩色图像隐写术
  • 第一次参加计算机会议报告注意事项以及心得
  • TypeScript教程(二)基础语法与基础类型
  • 问道管理:网上如何打新股?
  • 重磅更新,HertzBeat 集群版发布,易用友好的开源实时监控系统!
  • .NET6使用微信小程序授权登录,获取手机号
  • 游戏类APP如何提升用户的活跃度?
  • 【Sklearn】基于支持向量机算法的数据分类预测(Excel可直接替换数据)
  • 抽象类与接口
  • 第三章,矩阵,09-线性方程组解的判断与求法、矩阵方程
  • Vue-4.编译器VsCode
  • Neo4j之Aggregation基础
  • Python 函数
  • Spring(三):Spring中Bean的生命周期和作用域
  • 【AutoLayout案例03-设置底部按钮之间相同间距 Objective-C语言】
  • 代码随想录算法训练营20期|第七天|哈希表part02|454.四数相加II ● 383. 赎金信 ● 15. 三数之和 ● 18. 四数之和 ● 总结
  • NavMeshPlus 2D寻路插件
  • 【03】基础知识:typescript中的函数