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

leetcode128最长连续序列 golang版

题目描述

题目:给定一个未排序的整数数组 nums 找出数字连续的最长序列,不要求序列 元素在原数组中连续 的长度
请你设计并实现时间复杂度为On的算法解决此问题
示例 1:
输入:nums = [100,4,200,1,3,2]
输出:4
解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4 。
关键 用哈希表来记录这个字符是否出现过 然后遍历数组 对于每个数字 检查它是否是某个序列的开始,并更新最大长度
做不出来可以先看看题目,实在没思路再往下看看思路

解题思路

  1. 可以用一个哈希表存储需要查找的字符串
  2. 判断当前数字是否在哈希表中 如果当前数字在哈希表中那么它可能是一个连续的序列的起点,
  3. 找到这个起点向后遍历
  4. 确定最大长度返回

解题步骤

  1. 判断边界条件
  2. 创建哈希表存储这个数
  3. 将每个数字添加到哈希表中
  4. 初始化序列最长的长度、和当前查找的序列长度
  5. 遍历这个哈希表中的所有数字找到它的最长序列返回

代码实现

func longestConsecutive(nums []int) int {
   // 1. 左边界判断  做算法 的第一步
   if len(nums) == 0 {
      return 0
   }
   // 2.初始化哈希表
   set := make(map[int]bool)
   // 3.将数据存储到哈希表中
   for num := range nums {
      set[num] = true
   }
    // 3. 初始化 最长序列
    maxLength := 0
    for num :=  range set {
       // 如果当前数字的前一个字符不在哈希表中 那么当前这个数字就有可能是这个序列的起点
      if !set[num-1] {
           currentNum := num
           currentSteark := 1
        }
        for set[currentNum+1] {
            currentNum++
            currentSteark++
         }
         // 4.找到最大的那个序列长度
         maxLength := max(maxLength,currentSteark)
     }
  }
  // 5.返回最大值的序列长度
  return maxLength
}

代码测试

func main() {
  nums := []int{100, 4, 200, 1, 3, 2}
	fmt.Println("Longest consecutive sequence length is:", longestConsecutive(nums))
}

测试结果

在这里插入图片描述

Q&A

为什么使用哈希表来完成这个算法

1 .使用哈希表 可以最快效率的查到该元素 哈希表的复杂度为0(1)
2. 满足这个题目的时间复杂度On的要求

if !set[num-1] 做了什么事

这里说明了 如果当前元素的前一个元素不存在这个哈希表中的话,那么这个元素就可能是这个序列的起点。那么接下来的代码就会从这个数字开始找这个序列。


http://www.kler.cn/news/356410.html

相关文章:

  • OpenTK显示像素点云图
  • 深圳易图讯科技有限公司承建的厦门应急处突大队三维电子沙盘顺利通过专家验收
  • LeetCode-3191 使二进制数组全部等于1的最少操作次数
  • 位运算题目-Java实现-LeetCode题解:判断字符是否唯一-丢失的数字-两整数之和-只出现一次的数字 II-消失的两个数字
  • 从0开始深度学习(14)——模型选择、欠拟合、过拟合
  • torch.nn.Sequential介绍
  • 线性可分支持向量机的原理推导 最大化几何间隔d 公式解析
  • D36【python 接口自动化学习】- python基础之函数
  • VUE 开发——Vue学习(四)—— 智慧商城项目
  • Javascript中的堆内存和栈内存
  • mysql--数据类型
  • 前端vue项目使用Decimal.js做加减乘除求余运算
  • C++20中头文件source_location的使用
  • 大数据学习-Clickhouse
  • 数据结构——链表,哈希表
  • makefile和make
  • JavaWeb学习(3)
  • [项目详解][boost搜索引擎#1] 概述 | 去标签 | 数据清洗 | scp
  • 024 elasticsearch集群
  • 生财合伙人推荐 - 鞠海深-群控