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

力扣刷题Day 23:最长连续序列(128)

1.题目描述

2.思路

暴力解法是会超出时间限制的。首先将nums写成一个集合(哈希表),无限循环,对于集合顶端的元素向左and向右扩展最大长度,每访问一个元素就把它从集合里删掉,循环的结束条件是集合为空。

3.代码(Python3)

class Solution:def longestConsecutive(self, nums: List[int]) -> int:def neighbor_exist(num):left_num, right_num = num - 1, num + 1current_consecutive = 1while 1:if left_num in nums_set:nums_set.remove(left_num)current_consecutive += 1left_num -= 1else:breakwhile 1:if right_num in nums_set:nums_set.remove(right_num)current_consecutive += 1right_num += 1else:breakreturn current_consecutivenums_set = set(nums)longest_consecutive = 0while 1:if len(nums_set) == 0:return longest_consecutivecurrent_consecutive = neighbor_exist(nums_set.pop())longest_consecutive = max(longest_consecutive, current_consecutive)

4.执行情况

5.感想

看了官方题解发现了更简便的代码,直接遍历集合,如果当前元素不是当前序列的开始元素就continue,如果是就扩展长度直到扩展不了,如下:

class Solution:def longestConsecutive(self, nums: List[int]) -> int:nums_set = set(nums)longest_consecutive = 0for num in nums_set:if (num - 1) not in nums_set:current_consecutive = 1current_num = numwhile (current_num + 1) in nums_set:current_consecutive += 1current_num += 1longest_consecutive = max(longest_consecutive, current_consecutive)return longest_consecutive

但是这个代码执行出来的效果竟然不如我上面写的那个。不过也确实,官方题解是把全部元素都判断了一遍是不是开头,我是用完就删,确实应该相对高效。

http://www.dtcms.com/a/147716.html

相关文章:

  • HarmonyOS-ArkUI:关键帧动画 keyFrameAnimateTo
  • vue部署到nginx服务器 启用gzip
  • Python 网络编程:TCP 与 UDP 协议详解及实战代码
  • 服务器口令长度、强度、时效限制
  • 基于Python Socket的多线程聊天程序案例分析
  • Springboot集成websocket实现消息推送
  • 【C++教程】C++中为什么优先使用 cout/cin流
  • Windows网络及服务:制作系统盘
  • rk3588上完成halcon的形状模型配准以及和opencv的图像转换
  • 算法 | 成长优化算法(Growth Optimizer,GO)原理,公式,应用,算法改进研究综述,matlab代码
  • 【MySQL】MySQL中的数据类型详解
  • 【前端】【面试】【业务场景】前端如何获取并生成设备唯一标识
  • 使用pyinstaller打包fastapi项目的问题记录
  • 01-初识前端
  • 级联vs端到端、全双工、轮次检测、方言语种、商业模式…语音 AI 开发者都在关心什么?丨Voice Agent 学习笔记
  • 深度学习3.5 图像分类数据集
  • 每日算法-250421
  • Java 并发包核心机制深度解析:锁的公平性、异步调度、AQS 原理全解
  • 【MySQL】:数据库事务管理
  • JavaEE--2.多线程
  • 把dll模块注入到游戏进程的方法_基于文件修改的注入方式
  • MCP:AI时代的“万能插座”,开启大模型无限可能
  • SvelteKit 最新中文文档教程(22)—— 最佳实践之无障碍与 SEO
  • 进程与线程:02 多进程图像
  • 在统信UOS 1060上实现自动关机
  • 高防IP能抵御哪些类型的网络攻击?
  • Buildroot、BusyBox与Yocto:嵌入式系统构建工具对比与实战指南
  • 辛格迪客户案例 | 苏州富士莱医药GMP培训管理(TMS)项目
  • 深度学习3.3 线性回归的简洁实现
  • XXL-JOB 深入理解教程