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

【leetcode】寻找重复数

题目链接:寻找重复数icon-default.png?t=N176https://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】寻找重复数

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

LeetCode 1247. Minimum Swaps to Make Strings Equal【数学,贪心,字符串】

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…...

pid控制加热算法,附代码仓库

1、该项目层次化结构清晰&#xff0c;代码框架耦合度低&#xff0c;可复用性、可移植性强。 2、功能代码与底层硬件无直接关联&#xff0c;无需更改上层应用逻辑&#xff0c;只需更改接口文件&#xff0c;即可移植到不同的硬件平台&#xff1b; 3、使用lwrb开源组件、pid开源算…...

一文看懂预训练和自训练模型

说到预训练模型&#xff0c;不得不提迁移学习了&#xff0c;由于很多数据不是标签数据&#xff0c;人工标注非常耗时&#xff0c;神经网络在很多场景下受到了限制。但是迁移学习和自学习的出现&#xff0c;在一定程度上缓解甚至解决了这个问题。我们可以在标签丰富的场景下进行…...

(五十四)大白话索引的页存储物理结构,是如何用B+树来实现的?.md

上一次我们给大家说了主键索引的目录结构&#xff0c;只要在一个主键索引里包含每个数据页跟他最小主键值&#xff0c;就可以组成一个索引目录&#xff0c;然后后续你查询主键值&#xff0c;就可以在目录里二分查找直接定位到那条数据所属的数据页&#xff0c;接着到数据页里二…...

前端Vue代码风格指南

一、命名规范 市面上常用的命名规范&#xff1a; camelCase&#xff08;小驼峰式命名法 —— 首字母小写&#xff09; PascalCase&#xff08;大驼峰式命名法 —— 首字母大写&#xff09; kebab-case&#xff08;短横线连接式&#xff09; Snake&#xff08;下划线连接式&…...

「TCG 规范解读」基础设施架构和协议 (2)

可信计算组织&#xff08;Ttrusted Computing Group,TCG&#xff09;是一个非盈利的工业标准组织&#xff0c;它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立&#xff0c;并采纳了由可信计算平台联盟&#xff08;the Trusted Computing Platform Alli…...

NodeJs 中的 HTML 模板

&#x1f482; 个人网站:【海拥】【摸鱼游戏】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 想寻找共同学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 HTML 模板是一种允许我…...

3.ffmpeg命令行环境搭建、ffmpeg命令行初步了解

在上章,我们讲过: ffmpeg.exe: 主要用于转码或者剪切的应用程序, 也可以从url/现场音频/视频源抓取输入源ffplay.exe: 主要用于播放视频的应用程序,该应用程序源码是开源的,我们后面章节会去源码分析ffprobe.exe: 主要用于分析视频码流的应用程序, 可以获取媒体文件的详细信息,…...

Kubernetes初始化容器

初始化容器 之前了解了容器的健康检查的两个探针&#xff1a;liveness probe&#xff08;存活探针&#xff09;和readiness probe&#xff08;可读性探针&#xff09;的使用方法&#xff0c;我们说在这两个探针是可以影响容器的生命周期的&#xff0c;包括我们之前提到的容器的…...

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分钟 本文是来自向申同学的分享&#xff0c;介绍了其在 K8s 生产环境集群部署 Nydus 的相关实践。 Nydus 是蚂蚁集团&#xff0c;阿里云和字节等共建的开源容器镜像加速项目&#xff0c;是 CNCF Dragon…...

企业对不同形态CRM系统价格需求不同

很多企业在选型时关心CRM客户管理系统的价格&#xff0c;有人对CRM的价格完全没有概念&#xff0c;也有的人先问价格再看其他。CRM价格在系统选型中到底有多重要&#xff1f;不同类型CRM系统的价格是否有所不同&#xff1f; CRM的不同产品形态也会影响价格 通常情况下&#x…...

「JVM 高效并发」线程安全

面向过程编程&#xff0c;把数据和过程分别作为独立的部分考虑&#xff0c;数据代表问题空间中的客体&#xff0c;程序代码则用于处理这些数据&#xff1b;面向对象编程&#xff0c;把数据和行为都看做对象的一部分&#xff0c;以符合现实世界的思维方式来编写和组织程序&#…...

微信扫码登录

一、准备工作 微信开发者平台&#xff1a;https://open.weixin.qq.com 1、注册 2、邮箱激活 3、完善开发者资料 4、开发者资质认证&#xff1a;仅能企业注册&#xff08;后面提供学习的使用渠道&#xff09;准备营业执照&#xff0c;1-2个工作日审批、300元 5、创建网站应用&…...

Unity协程的简单应用

Unity协程是一种特殊的函数&#xff0c;可以让你在Unity中创建一种类似于多线程的异步操作。它可以在需要等待某个操作完成时&#xff0c;暂停执行当前代码&#xff0c;等待某个条件满足后再继续执行。 在一般情况下 unity中调用函数时&#xff0c;函数将运行到完成状态&#x…...

LeetCode 1250. Check If It Is a Good Array【数论】

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…...

ETHDenver 2023

ETHDenver是全球最大、持续时间最长的以太坊活动之一&#xff0c;今年的活动定于2月24日至3月5日在美国科罗拉多州丹佛市盛大举行。这次活动将面向以太坊和其他区块链协议爱好者、设计者和开发人员。Moonbeam作为ETHDenver 2023的Meta赞助商&#xff0c;将在本次活动中展示令人…...

React架构演变

老版React架构 React 16之前的架构 其实就分为两个部分&#xff1a; Reconciler协调器Render渲染器 Reconciler协调器负责本次更新有什么组件需要被渲染&#xff0c;diff算法就发生在这个步骤中&#xff0c;在diff算法中会将上次更新的组件和本次更新的组件做一个对比&…...

安全认证--JWT介绍及使用

安全认证--JWT介绍及使用1.无状态登录原理1.1.什么是有状态&#xff1f;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.无状态登录原理 有状态登录和无状态登录详…...

从零到一:LRFormer (TPAMI 2025) 实战部署与避坑指南

1. 为什么选择LRFormer&#xff1f; 最近在复现TPAMI 2025上的LRFormer模型时&#xff0c;我发现这个基于局部-全局关系建模的视觉Transformer确实有不少亮点。相比传统CNN模型&#xff0c;它在处理长距离依赖关系时表现更出色&#xff0c;特别是在细粒度图像分类任务上&#x…...

Vivado项目文件太多分不清?这份FPGA开发必备的‘文件后缀速查手册’请收好

Vivado项目文件管理终极指南&#xff1a;从后缀识别到高效工作流 当你第一次打开一个成熟的Vivado项目文件夹时&#xff0c;那种面对几十种陌生文件后缀的茫然感&#xff0c;相信每个FPGA开发者都记忆犹新。就像走进了一个满是神秘符号的仓库&#xff0c;每个文件似乎都在向你发…...

避开这些坑!在PX4 1.14.0上添加自定义串口传感器的完整避坑指南

PX4 1.14.0自定义串口传感器开发实战&#xff1a;从设备注册到数据解析全链路避坑指南 当你在PX4飞控上尝试接入一款新型激光雷达时&#xff0c;是否遇到过这样的场景&#xff1a;按照官方文档一步步操作&#xff0c;编译通过后却发现传感器始终无法输出有效数据&#xff1f;本…...

OpCore-Simplify:让OpenCore EFI配置变得智能高效

OpCore-Simplify&#xff1a;让OpenCore EFI配置变得智能高效 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 问题引入&#xff1a;为什么Hackintosh配…...

从仿真到实战:在CST/HFSS中如何设置周期性边界条件评估紧耦合天线阵元性能

从仿真到实战&#xff1a;在CST/HFSS中设置周期性边界条件评估紧耦合天线阵元性能 天线阵列设计中最具挑战性的环节之一&#xff0c;是如何准确预测单个阵元在阵列环境中的真实工作状态。当我在设计第一个超宽带相控阵时&#xff0c;曾因忽视阵元间互耦效应导致实物测试结果与仿…...

媒体查询、事件绑定、对象拷贝等知识点总结

一、媒体查询&#xff08;CSS3 响应式设计&#xff09;1. 基本语法cssmedia 媒体类型 and (媒体特性) {/* CSS 规则 */ }2. 常用媒体类型值说明screen电脑屏幕、平板、手机等print打印机all所有设备&#xff08;默认&#xff09;3. 常用媒体特性特性说明max-width最大宽度&…...

Windows系统优化神器:Winhance中文版全面使用指南

Windows系统优化神器&#xff1a;Winhance中文版全面使用指南 【免费下载链接】Winhance-zh_CN A Chinese version of Winhance. C# application designed to optimize and customize your Windows experience. 项目地址: https://gitcode.com/gh_mirrors/wi/Winhance-zh_CN …...

Qwerty Learner可扩展性设计:为未来功能预留空间的完整指南

Qwerty Learner可扩展性设计&#xff1a;为未来功能预留空间的完整指南 【免费下载链接】qwerty-learner 为键盘工作者设计的单词记忆与英语肌肉记忆锻炼软件 / Words learning and English muscle memory training software designed for keyboard workers 项目地址: https:…...

日期时间格式化中的字母代码解析与应用实例

1. 日期时间格式化字母代码入门指南 第一次接触日期时间格式化时&#xff0c;看到那些神秘的字母组合是不是一头雾水&#xff1f;yy、MM、dd这些看起来简单的代码&#xff0c;在实际使用中却藏着不少门道。作为处理时间数据的基础技能&#xff0c;掌握这些字母代码的含义和用法…...

实战演练:基于快马与豆包开放平台,快速开发智能邮件处理助手

今天想和大家分享一个实战项目&#xff1a;基于豆包开放平台的智能邮件助手开发过程。这个工具特别适合需要频繁处理邮件的职场人士&#xff0c;能自动完成邮件摘要、待办事项提取、回复草拟等重复性工作。 项目背景与需求分析 日常工作中&#xff0c;我们经常要处理大量邮件。…...