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

力扣100热题[哈希]:最长连续序列

原题:128. 最长连续序列

题解:

官方题解:. - 力扣(LeetCode)题解,最长连续序列 :哈希表

官方解题思路是先去重,然后判断模板长度的数值是否存在,存在就刷新,最终找到最大值。

这里我自己研究了下,实际也是暴力解法。纯暴力解法会超时,这里利用了二分法查找的理念

  • 首先去重
  • 然后排序
  • 固定begin,然后找最大的end,返回max=end-begin+1使用二分法理念进行查找
  • 依次遍历,在end-begin<curmax已经找到的最大值,返回curmax +1

自己尝试了下,部分通过,有些边界值不太好控制,而且输入里面有负数,也不太好计算。

还有一种解题方法,就是在官方题解上做个变化,

  • 首先去重
  • 然后排序
  • 依次遍历,找到满足nums[i + 1] = nums[i] + 1的最长子数组,返回其长度。

代码:

func longestConsecutive(nums []int) int {// 如果数组为空,或者只有一个元素,直接返回数组长度if len(nums) <= 1 {return len(nums)}// 去重numSet := map[int]bool{}for _, num := range nums {numSet[num] = true}// 排序numTemp := make([]int, 0)for num := range numSet {numTemp = append(numTemp, num)}sort.Ints(numTemp)// fmt.Printf("numTemp %v\n", numTemp)// 暴力解法longestStreak := 0for begin := range numTemp {// 当剩余的个数,小于当前最大长度,则后面不可能有满足条件的更大的值,返回if begin+longestStreak > len(numTemp) {return longestStreak + 1}temp := BinarySearchMatch(numTemp, begin, longestStreak)if longestStreak < temp {longestStreak = temp}}return longestStreak + 1
}func BinarySearchMatch(numTemp []int, begin, cur int) int {longestStreak := cur// 当前最大可用差值curMaxDiff := len(numTemp) - begin - 1// 使用二分法的理念,查询满足条件的数据for end := len(numTemp) - 1; end > begin; {// fmt.Printf("begin %v, end %v, curMaxDiff %v\n", begin, end, curMaxDiff)// 索引差值超过最大值,返回,end超过数组范围,返回if curMaxDiff >= len(numTemp) || end >= len(numTemp) {break}// 差值为0时,有可能会遗漏一个,判断end的下一个是否满足条件if curMaxDiff == 0 {if end < len(numTemp)-1 && numTemp[end+1]-numTemp[begin] == end+1-begin {longestStreak = end + 1 - begin}if end > begin && numTemp[end-1]-numTemp[begin] == end-1-begin {longestStreak = end - 1 - begin}if end > begin && numTemp[end]-numTemp[begin] == end-begin {longestStreak = end - begin}break}// 数值差值valDiff := numTemp[end] - numTemp[begin]// 索引差值indexDiff := end - begin// 二分法找到合适的索引end// 索引差值 < 数值差值,数值太大了,中间有不连续的,往前移动curMaxDiff/2if valDiff > indexDiff && indexDiff != 0 {curMaxDiff = curMaxDiff / 2end = end - curMaxDiffcontinue}// 索引差值 > 数值差值,这种不可能存在,因为已经去重了// 索引差值 = 数值差值,后面可能还有满足条件的,继续找if valDiff == indexDiff {// 刷新最大值if longestStreak > valDiff {break}longestStreak = valDiff// end后移curMaxDiff/2curMaxDiff = curMaxDiff / 2end = end + curMaxDiffcontinue}}return longestStreak
}

第二种方法

func longestConsecutive(nums []int) int {// 如果数组为空,或者只有一个元素,直接返回数组长度if len(nums) <= 1 {return len(nums)}// 去重numSet := map[int]bool{}for _, num := range nums {numSet[num] = true}// 排序numTemp := make([]int, 0)for num := range numSet {numTemp = append(numTemp, num)}sort.Ints(numTemp)//fmt.Printf("numTemp %v\n", numTemp)// 暴力解法longestStreak := 0for num := range numTemp {if num < len(numTemp)-1 && numTemp[num]+1 == numTemp[num+1] {currentNum := numcurrentStreak := 1for currentNum < len(numTemp)-1 && numTemp[currentNum]+1 == numTemp[currentNum+1] {currentNum++currentStreak++}if longestStreak < currentStreak {longestStreak = currentStreak}}}return longestStreak
}

相关文章:

力扣100热题[哈希]:最长连续序列

原题&#xff1a;128. 最长连续序列 题解&#xff1a; 官方题解&#xff1a;. - 力扣&#xff08;LeetCode&#xff09;题解&#xff0c;最长连续序列 &#xff1a;哈希表 官方解题思路是先去重&#xff0c;然后判断模板长度的数值是否存在&#xff0c;存在就刷新&#xff0c…...

python笔记基础--文件和存储数据(7)

目录 1.从文件中读取数据 2.写入文件 3.存储数据 3.1使用json.dump()和json.load() 3.2保存和读取用户生成的数据 3.3重构 1.从文件中读取数据 读取整个文件 with open(data.txt) as file_object: contents file_object.read()print(contents)print(contents.rstrip…...

Vue黑马笔记(最新)

VUE vue是一个用于构建用户界面的渐进式框架 创建一个VUE实例 核心步骤&#xff1a; 准备容器引包&#xff08;官网&#xff09;-开发版本/生产版本创建一个vue实例 new vue()指定配置项->渲染数据 el指定挂载点&#xff08;选择器&#xff09;,指定管理的是哪个容器。dat…...

安全工具介绍 SCNR/Arachni

关于SCNR 原来叫Arachni 是开源的&#xff0c;现在是SCNR&#xff0c;商用工具了 可试用一个月 Arachni Web Application Security Scanner Framework 看名字就知道了&#xff0c;针对web app 的安全工具&#xff0c;DASTIAST吧 安装 安装之前先 sudo apt-get update sudo…...

赋能数据收集:从机票网站提取特价优惠的JavaScript技巧

背景介绍 在这个信息时代&#xff0c;数据的收集和分析对于旅游行业至关重要。在竞争激烈的市场中&#xff0c;实时获取最新的机票特价信息能够为旅行者和旅游企业带来巨大的优势。 随着机票价格的频繁波动&#xff0c;以及航空公司和旅行网站不断推出的限时特价优惠&#xff…...

【大模型】在VS Code(Visual Studio Code)上安装中文汉化版插件

文章目录 一、下载安装二、配置显示语言&#xff08;一&#xff09;调出即将输入命令的搜索模式&#xff08;二&#xff09;在大于号后面输入&#xff1a;Configure Display Language&#xff08;三&#xff09;重启 三、总结 【运行系统】win 11 【本文解决的问题】 1、英文不…...

自定义WordPress顶部的菜单的方法

要自定义WordPress顶部的菜单&#xff0c;你需要使用WordPress的菜单系统。首先&#xff0c;你需要创建自定义菜单&#xff0c;然后将其设置为顶部导航菜单。 以下是创建自定义菜单并设置其为顶部导航菜单的步骤&#xff1a; 登录到WordPress管理界面。转到“外观”>“菜单…...

独孤思维:流量暴涨,却惨遭违规

最近独孤操作虚拟资料短视频&#xff0c;有个很深的感悟。 每天发10条短视频&#xff0c;积累到20天左右&#xff0c;播放量和粉丝数开始暴涨。 虽然很多牛比的比我数据好&#xff0c;但是对于刚做短视频的独孤来说&#xff0c;我已经满足了。 但是又发了10来天&#xff0c;…...

【python 装饰器 - 重试】做一个简易重试装饰器,如果函数执行错误则会自动重新执行,可设置重试次数,对爬虫比较友好

文章日期&#xff1a;2024.03.19 使用工具&#xff1a;Python 类型&#xff1a;装饰器 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 AES解密处理&#xff08;直接解密即可&#xff09;&#xff08;crypto-js.js 标准算法&#xff09;&…...

Linux线程补充之——同步

一、Linux线程同步 ​ 同步是相对于竞争的概念&#xff1b; ​ 同步就是在保证安全的前提下啊&#xff0c;按照一定的顺序访问临界资源&#xff1b; ​ 所有的资源一定是先访问的临界资源&#xff0c;申请失败然后才进行排队的&#xff1b;互斥锁保证的是来访问的进程只允许…...

面试九 设计模式

单例模式通常被归类为创建型设计模式&#xff0c;因为它主要关注如何创建对象的实例&#xff0c;以及如何确保在整个应用程序生命周期中只有一个实例存在。 1.为什么日志模块和数据库连接池需要单例模式 使用单例模式来实现数据库连接池主要有以下几个原因&#xff1a; 全局唯…...

c++和c语言的区别实例

C和C语言在程序设计领域内具有深远的影响&#xff0c;它们不仅丰富了编程的世界&#xff0c;也为软件开发人员提供了强大的工具。虽然C是在C语言的基础上发展起来的&#xff0c;但两者之间存在着一些关键的区别。为了更深入地理解这些不同&#xff0c;本文将从多个维度探讨C和C…...

图论基础|841.钥匙和房间、463. 岛屿的周长

目录 841.钥匙和房间 思路&#xff1a;本题是一个有向图搜索全路径的问题。 只能用深搜&#xff08;DFS&#xff09;或者广搜&#xff08;BFS&#xff09;来搜。 463. 岛屿的周长 841.钥匙和房间 力扣题目链接 (opens new window) 有 N 个房间&#xff0c;开始时你位于 0…...

把 Taro 项目作为一个完整分包,Taro项目里分包的样式丢失

现象&#xff1a; 当我们把 Taro 项目作为原生微信小程序一个完整分包时&#xff0c;Taro项目里分包的样式丢失&#xff0c;示意图如下&#xff1a; 原因&#xff1a; 在node_modules/tarojs/plugin-indie/dist/index.js文件里&#xff0c;限制了只有pages目录下会被引入app.w…...

腾讯云服务器价格查询系统,2024年1年、3年和5年活动价格表

腾讯云服务器多少钱一年&#xff1f;61元一年起。2024年最新腾讯云服务器优惠价格表&#xff0c;腾讯云轻量2核2G3M服务器61元一年、2核2G4M服务器99元一年可买三年、2核4G5M服务器165元一年、3年756元、轻量4核8M12M服务器646元15个月、4核16G10M配置32元1个月、312元一年、8核…...

第十四届蓝桥杯大赛软件赛省赛Java大学B组

最近正在备考蓝桥杯&#xff0c;报的java b组&#xff0c;顺便更一下蓝桥的 幸运数字 题目 思路&#xff1a;填空题&#xff0c;暴力即可 import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改public class Main {static int trans(int x, int y){int …...

Java二阶知识点总结(七)SVN和Git

SVN 1、SVN和Git的区别 SVN是集中式的&#xff0c;也就是会有一个服务器保存所有代码&#xff0c;拉取代码的时候只能从这个服务器上拉取&#xff1b;Git是分布式的&#xff0c;也就是说每个人都保存有所有代码&#xff0c;如果要获取代码&#xff0c;可以从其他人手上获取SV…...

Java后端八股------设计模式

Coffee可以设计成接口。...

DBO优化GRNN回归预测(matlab代码)

DBO-GRNN回归预测matlab代码 蜣螂优化算法(Dung Beetle Optimizer, DBO)是一种新型的群智能优化算法&#xff0c;在2022年底提出&#xff0c;主要是受蜣螂的的滚球、跳舞、觅食、偷窃和繁殖行为的启发。 数据为Excel股票预测数据。 数据集划分为训练集、验证集、测试集,比例…...

Day 31 贪心01

理论基础 贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优。最好用的策略就是举反例&#xff0c;如果想不到反例&#xff0c;那么就试一试贪心吧。 贪心算法一般分为如下四步&#xff1a; 将问题分解为若干个子问题找出适合的贪心策略求解每一个子问题的最优…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...