【leetcode】寻找重复数
题目链接:寻找重复数
https://leetcode.cn/problems/find-the-duplicate-number/
方法一:快慢指针
因为只有一个数字是重复的,且一个数字正好对应一个唯一的下标,所以可以将数组抽象为一个链表,假定数组为{1,2,3,4,5,6,3} --> {1,2,3,4,5,6},{3,4,5,6},{3,4,5,6}...

slow一次走一步,fast一次走两步,那么当slow与fast相遇的时候,必定是在环内的某一个位置,假设slow走了n步,fast就走了2n步。假设数组首部到环入口的距离为m,那么slow在环内走了n-m的长度, fast走了2n-m个长度,
则有 2n-m = k(n-m) (k != 0)
不妨设 n - m = c 则可知 n%c == 0
现在slow走了n-m步,让slow再走m步就会到达环的入口(n%c == 0),而m正是起点到环入口的距离。
代码
class Solution {
public:int findDuplicate(vector<int>& nums) {//快慢指针//当出现相同的数字时,会形成类似于链表中的环。int fast = 0,slow = 0;while(true){fast = nums[nums[fast]];//fast一次走两步slow = nums[slow];//slow一次走一步if(fast == slow)//两个节点下相遇,必定是在环内部。break;}//当finder == slow时就是环的入口//为什么finder和slow相遇的时候,就是入口?/*假定slow 和 fast 相遇时,fast走了2n步,slow走了n步 环长度为c 起点至环入口就是m则有n%c == 0 n - m 为slow走的距离,当slow再走一个m时,就到环的入口,而m正是起点到环入口的距离*/int finder = 0;while(true){finder = nums[finder];slow = nums[slow];if(slow == finder) break;}return slow;}
};
方法二:二分查找
假定数组q[] = {1,2,3,4,4} q.size() = 5 区间[1,4]
小于等于 1 的数字个数为 1 (1)
小于等于 2 的数字个数为 2 (1、2)
小于等于 3 的数字个数为 4 (1、2 、3)
小于等于 4 的数字个数为 4 (1、2、3、4、4)
可以看到左边的数集合严格小于自身,右边的数集合严格大于自身。当集合中的个数cnt > 指定的数字时,就会出现重复数字。
二分的思想时,当出现一个条件可以使得左半边的数字严格与右半边的数字出现分割就行。
class Solution {
public:int findDuplicate(vector<int>& nums) {int l = 0,r = nums.size()-1;while(l < r){int mid = l + r >> 1;int cnt = 0;for(int i = 0;i < nums.size();i++){if(nums[i] <= mid){cnt++;}}//当出现从cnt > mid 就说明mid的左半部分出现了重复的数字,使得计数大于mid//重复的数字在[l,mid]if(cnt > mid) r = mid;else l = mid + 1;}return l;}
};
相关文章:
【leetcode】寻找重复数
题目链接:寻找重复数https://leetcode.cn/problems/find-the-duplicate-number/ 方法一:快慢指针 因为只有一个数字是重复的,且一个数字正好对应一个唯一的下标,所以可以将数组抽象为一个链表,假定数组为{1,2,3,4,5,…...
LeetCode 1247. Minimum Swaps to Make Strings Equal【数学,贪心,字符串】
本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...
pid控制加热算法,附代码仓库
1、该项目层次化结构清晰,代码框架耦合度低,可复用性、可移植性强。 2、功能代码与底层硬件无直接关联,无需更改上层应用逻辑,只需更改接口文件,即可移植到不同的硬件平台; 3、使用lwrb开源组件、pid开源算…...
一文看懂预训练和自训练模型
说到预训练模型,不得不提迁移学习了,由于很多数据不是标签数据,人工标注非常耗时,神经网络在很多场景下受到了限制。但是迁移学习和自学习的出现,在一定程度上缓解甚至解决了这个问题。我们可以在标签丰富的场景下进行…...
(五十四)大白话索引的页存储物理结构,是如何用B+树来实现的?.md
上一次我们给大家说了主键索引的目录结构,只要在一个主键索引里包含每个数据页跟他最小主键值,就可以组成一个索引目录,然后后续你查询主键值,就可以在目录里二分查找直接定位到那条数据所属的数据页,接着到数据页里二…...
前端Vue代码风格指南
一、命名规范 市面上常用的命名规范: camelCase(小驼峰式命名法 —— 首字母小写) PascalCase(大驼峰式命名法 —— 首字母大写) kebab-case(短横线连接式) Snake(下划线连接式&…...
「TCG 规范解读」基础设施架构和协议 (2)
可信计算组织(Ttrusted Computing Group,TCG)是一个非盈利的工业标准组织,它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立,并采纳了由可信计算平台联盟(the Trusted Computing Platform Alli…...
NodeJs 中的 HTML 模板
💂 个人网站:【海拥】【摸鱼游戏】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 想寻找共同学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 HTML 模板是一种允许我…...
3.ffmpeg命令行环境搭建、ffmpeg命令行初步了解
在上章,我们讲过: ffmpeg.exe: 主要用于转码或者剪切的应用程序, 也可以从url/现场音频/视频源抓取输入源ffplay.exe: 主要用于播放视频的应用程序,该应用程序源码是开源的,我们后面章节会去源码分析ffprobe.exe: 主要用于分析视频码流的应用程序, 可以获取媒体文件的详细信息,…...
Kubernetes初始化容器
初始化容器 之前了解了容器的健康检查的两个探针:liveness probe(存活探针)和readiness probe(可读性探针)的使用方法,我们说在这两个探针是可以影响容器的生命周期的,包括我们之前提到的容器的…...
leetcode: Swapping Nodes in a Linked List
leetcode: Swapping Nodes in a Linked List1. 题目描述2. 题目解答3. 总结1. 题目描述 You are given the head of a linked list, and an integer k.Return the head of the linked list after swapping the values of the kth node from the beginning and the kth node f…...
Nydus 在约苗平台的容器镜像加速实践
文 | 向申 约苗平台运维工程师 关注云原生领域 本文字数 9574阅读时间24分钟 本文是来自向申同学的分享,介绍了其在 K8s 生产环境集群部署 Nydus 的相关实践。 Nydus 是蚂蚁集团,阿里云和字节等共建的开源容器镜像加速项目,是 CNCF Dragon…...
企业对不同形态CRM系统价格需求不同
很多企业在选型时关心CRM客户管理系统的价格,有人对CRM的价格完全没有概念,也有的人先问价格再看其他。CRM价格在系统选型中到底有多重要?不同类型CRM系统的价格是否有所不同? CRM的不同产品形态也会影响价格 通常情况下&#x…...
「JVM 高效并发」线程安全
面向过程编程,把数据和过程分别作为独立的部分考虑,数据代表问题空间中的客体,程序代码则用于处理这些数据;面向对象编程,把数据和行为都看做对象的一部分,以符合现实世界的思维方式来编写和组织程序&#…...
微信扫码登录
一、准备工作 微信开发者平台:https://open.weixin.qq.com 1、注册 2、邮箱激活 3、完善开发者资料 4、开发者资质认证:仅能企业注册(后面提供学习的使用渠道)准备营业执照,1-2个工作日审批、300元 5、创建网站应用&…...
Unity协程的简单应用
Unity协程是一种特殊的函数,可以让你在Unity中创建一种类似于多线程的异步操作。它可以在需要等待某个操作完成时,暂停执行当前代码,等待某个条件满足后再继续执行。 在一般情况下 unity中调用函数时,函数将运行到完成状态&#x…...
LeetCode 1250. Check If It Is a Good Array【数论】
本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...
ETHDenver 2023
ETHDenver是全球最大、持续时间最长的以太坊活动之一,今年的活动定于2月24日至3月5日在美国科罗拉多州丹佛市盛大举行。这次活动将面向以太坊和其他区块链协议爱好者、设计者和开发人员。Moonbeam作为ETHDenver 2023的Meta赞助商,将在本次活动中展示令人…...
React架构演变
老版React架构 React 16之前的架构 其实就分为两个部分: Reconciler协调器Render渲染器 Reconciler协调器负责本次更新有什么组件需要被渲染,diff算法就发生在这个步骤中,在diff算法中会将上次更新的组件和本次更新的组件做一个对比&…...
安全认证--JWT介绍及使用
安全认证--JWT介绍及使用1.无状态登录原理1.1.什么是有状态?1.2.什么是无状态1.3.如何实现无状态1.4.JWT1.4.1.简介1.4.2.数据格式2.编写JWT工具2.1.添加JWT依赖2.2.载荷对象2.3.工具2.4.测试2.4.1.配置秘钥2.4.2.测试类1.无状态登录原理 有状态登录和无状态登录详…...
手把手图解:用Wireshark抓个包,带你‘看见’一次IMS注册和SIP会话的全过程
手把手图解:用Wireshark抓个包,带你‘看见’一次IMS注册和SIP会话的全过程 通信工程师的日常工作中,最令人着迷的莫过于将抽象的网络协议转化为可视化的数据流。当终端设备向IMS核心网发起注册并建立语音会话时,背后究竟发生了什么…...
STM32G474的HRTIM驱动DAC:你的锯齿波‘毛刺’和失真,可能是这两个寄存器配置反了
STM32G474的HRTIM驱动DAC:锯齿波失真问题深度解析与优化方案 在精密模拟电路设计中,STM32G474系列微控制器凭借其高性能HRTIM(高分辨率定时器)和DAC(数模转换器)的组合,成为生成高精度波形的重要…...
mpv.net 高效配置实战:从媒体播放到专业调优的进阶指南
mpv.net 高效配置实战:从媒体播放到专业调优的进阶指南 【免费下载链接】mpv.net 🎞 mpv.net is a media player for Windows with a modern GUI. 项目地址: https://gitcode.com/gh_mirrors/mp/mpv.net 作为一款基于mpv核心的现代化Windows媒体播…...
【花雕动手做】Aily Blockly 安装 + 环境配置清单 + 避坑指南
项目情况 Aily Blockly 是 Aily Project 推出的开源、AI 驱动的硬件图形化开发 IDE,核心是用 “拖拽积木 自然语言对话 端云协同编译” 大幅降低嵌入式(ESP32/Arduino/STM32)开发门槛,兼顾新手易用与工业级工程化能力。 1、核心…...
港澳通行证照片怎么手机拍?2026 手机拍摄规格要求和实用方法全解
准备办理港澳通行证却被照片规格搞得不知所措?其实用手机就能拍出符合要求的证件照,关键是掌握正确的拍摄方法和规格标准。这篇文章将详细讲解港澳通行证照片的手机拍摄方法,包括规格要求、拍摄步骤,以及如何后期处理让照片完美达…...
如何通过智能包装系统提升全链条的数字化与协同效率?
本段聚焦全链条数字化升级的核心路径,通过 智能包装系统实现 原材料到成品的数据共享与流程对齐。以原材料入库、生产、成品出库为主线,建立统一的数据模型、模块化接口与可追溯闭环,推动 协同优化与成本控制。结合 中科天工智能包装设备与 中…...
直流接地故障查找:从原理到实践的安全操作指南
1. 项目概述:为什么直流接地查找是个“精细活儿”?在电力系统、轨道交通、数据中心以及各类工业控制场景中,直流系统是名副其实的“神经系统”。它为继电保护、自动装置、通信设备、事故照明以及控制回路提供稳定可靠的电源。你可以把它想象成…...
基于Fog Project的系统无人值守部署(一)Fog Project安装
安装部署 官网下载安装包进行安装 https://fogproject.org/download.php 安装 以下安装基于Debian 13系统进行部署。 rootdebian:~# ls FOGProject-fogproject-1.5.10.1673-0-g8af159d.tar.gz rootdebian:~# tar -xzvf FOGProject-fogproject-1.5.10.1673-0-g8af159d.tar.…...
保姆级教程:在Windows上用Python连接CoppeliaSim远程API(附避坑指南)
从零开始掌握CoppeliaSim与Python的远程控制:Windows环境实战指南 在机器人仿真领域,CoppeliaSim(原V-REP)因其强大的功能和友好的用户界面而广受欢迎。对于希望将Python的灵活性与CoppeliaSim的仿真能力结合的研究者和工程师来说…...
全球仅12家顶级艺术机构内部流通的Perplexity知识图谱映射表(含RIS/JSON-LD双格式导出密钥)
更多请点击: https://intelliparadigm.com 第一章:Perplexity艺术知识搜索的范式革命 传统搜索引擎依赖关键词匹配与页面权重排序,在艺术史、当代策展理论、跨媒介创作方法论等高度语境化、隐喻密集的知识领域中,常陷入“查得到却…...
