LeetCode 287. 寻找重复数

深信服上网行为管理设备登录方法、恢复出厂、恢复控制台密码 1.初识设备 1.1 设备外观 1.2 软件版本 2.如何登录设备 首次拿到AC/SG设备时,可以通过以下方法登录设备控制台 SANGFOR AC/SG设备,各网口默认的出厂IP为: eth0(LAN):10.251.251.251/24 , eth1(DMZ)10.252.252.252/24 1、使用一根交叉线连接设备和电脑 (1) 如果电脑连接的是设备的eth0口,需先在电脑上配... 阅读详情

题目:

给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。

示例 1:
输入: [1,3,4,2,2]
输出: 2

示例 2:
输入: [3,1,3,4,2]
输出: 3

说明:

  • 不能更改原数组(假设数组是只读的)。
  • 只能使用额外的 O(1) 的空间。
  • 时间复杂度小于 O(n2) 。
  • 数组中只有一个重复的数字,但它可能不止重复出现一次。

题解:

/**
 * @Author dfpeng
 * @Date 2019/7/25
 */
public class Solution {
    /**
     * 在网上看到一种很巧妙的解法,
     * 现在还没想太明白,留着日后再看
     * @param nums
     * @return
     */
    public static int findDuplicate(int[] nums) {
        int res = 0;
        for (int fast = 0; res != fast || fast == 0; ) {
            res = nums[res];
            fast = nums[nums[fast]];
        }
        for (int i = 0; res != i; i = nums[i]) {
            res = nums[res];
        }
        return res;
    }


    /**
     * 先计算mid,然后统计数组中<=mid的元素个数count
     * 如果count<=mid,则说明重复的数字在[mid+1,high]范围中
     * 否则的话在[low,mid]范围中
     * 一直重复这种操作,直到low==high
     * @param nums
     * @return
     */
    public static int solve(int[] nums){
        int len=nums.length;
        int low=0,high=len-1;
        int count;
        while (low<high){
            int mid=(low+high)>>1;
            count=0;
            for (int i = 0; i <len ; i++) {
                if (nums[i]<=mid){
                    count++;
                }
            }
            if (count<=mid){
                low=mid+1;
            }else{
                high=mid;
            }
        }
        return low;
    }



    public static void main(String[] args) {
        int res=findDuplicate(new int[]{2,5, 9 ,6,9,3,8, 9 ,7,1});
        System.out.println(res);
    }
}

【国产MCU系列】-GD32F4开发环境搭建(基于Embedded Builder) GD32F4系列MCU采用Arm® Cortex®-M4内核,处理器主频高达240MHz,可支持算法复杂度更高的嵌入式应用,具备更快速的实时处理能力,并拥有业界领先的大容量存储优势。 阅读详情

相关推荐

分析android逆向的学习路线

俗话说:“一入逆向深似海,从此头发是路人”。 安卓逆向作为当下热门行业“网络安全”的主要技术之一,已经受到了越来越多人的青睐。但是很多刚入门的新手小伙伴对于怎么去学习却还很是迷糊。本文就分享一下android逆向的学习路线供大家参考。 目前学习安卓逆向的人群大约分为两种: 第一种是完全没有任何基础的计算机纯小白; 第二种是本来就做开发懂编程的IT行业人员。 我们就针对这两个不同的人群做一下安卓逆向的学习路线分析。 一、无基础小白想入门 作为没有任何基础想要入门的计算机纯小白,学习上推荐参照以下步骤: (一

Hacker_by_V的博客 3077

leetcode---- 287.寻找重复数(二分查找与快慢指针两种解法)

leetcode-----287.寻找重复数 问题:给定一个包含 n + 1 个整数的数组 nums ,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。 假设 nums 只有 一个重复的整数 ,找出 这个重复的数 。 你设计的解决方案必须不修改数组 nums 且只用常量级 O(1) 的额外空间。 思路: 二分查找 定义count[i]表示nums数组中小于等于i的数字的个数。且count数组是递增的。以示例1为例 输入:nums = [1,3,4,2,2] 输出:2

Thomasc的博客 1652

若依(RuoYi)项目里,Quartz定时任务踩坑实录:并发控制、事务回滚与异常处理

本文深入解析若依(RuoYi)项目中Quartz定时任务的并发控制、事务回滚与异常处理三大核心问题。通过实战案例揭示@DisallowConcurrentExecution注解的局限性和Redis分布式锁的应用,详细讲解Spring事务集成方案及多数据源事务管理,并提供生产级监控体系搭建指南,帮助开发者规避Quartz在生产环境中的常见陷阱。

weixin_28731223的博客 408

【LeetCode】287. 寻找重复数

巧妙使用二分法能够很好的解决问题。关键是:怎么把一个问题转换成可以用二分法解决的问题?

说文科技,做有态度的研究。 823

新能源充电桩充电枪口标准

建立的标准确保了新能源汽车充电的安全性、兼容性和效率,促进了新能源汽车产业的发展。

网络安全的研究者、新能源行业的追求者 4686

ChromeOS安装教程

ChromeOS,是基于Linux内核研发的ChromiumOS开源系统的闭源系统,最大的特色就是内置了Chrome浏览器,早期主要以Web云端应用程序为主,后来逐渐引入了Android子系统和Linux子系统。本文主要简述摸索的家用笔记本安装ChromeOS安装方法,供各位玩机朋友参考。

weixin_45751495的博客 8112

Leetcode刷题(第287题)——寻找重复数

一、题目 给定一个包含 n + 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。 假设 nums 只有 一个重复的整数 ,返回 这个重复的数 。 你设计的解决方案必须 不修改 数组 nums 且只用常量级 O(1) 的额外空间。 二、示例 输入:nums = [1,3,4,2,2] 输出:2 输入:nums = [3,1,3,4,2] 输出:3 三、思路 本题以[1,3,4,2,2]为例。 首先是num[0]-> 1 num[1]

weixin_47450807的博客 1210

Altium Designer操作技巧(4)——如何利用嘉立创EDA来输出3D封装到AD封装库?

本文介绍了利用嘉立创EDA和FreeCAD软件为PCB元件添加3D模型的方法。首先在嘉立创EDA中搜索元件编号并导出3D模型,然后使用FreeCAD删除3D模型中的PCB基板部分,最后将处理后的3D模型导入PCB封装库并更新到PCB设计中。文章详细讲解了每个步骤的操作流程,包括模型导出、基板删除、位置调整等关键环节,并提供了解决常见问题的方法。通过这种方法,电子工程师可以快速获得元器件的3D模型,提高PCB设计的准确性。

u012526819的博客 2584

【Leetcode 287】 —— 寻找重复数 |双指针

对 nums 数组建图,**每个位置 i 连一条 i→nums[i] 的边**。由于存在的重复的数字 target ,因此 target 这个位置一定有起码两条指向它的边,因此**整张图一定存在环**,且我们要找到的 target 就是**这个环的入口**,那么整个问题就等价于[环路检测/环形链表 II]

若明天不见 875

从零到一:手把手教你构建自定义ReaxFF力场参数

本文手把手教你从零构建自定义ReaxFF力场参数,详解反应力场的动态键序机制与参数化逻辑。通过LAMMPS实战演示,涵盖训练数据准备、参数优化算法选择及性能优化技巧,助力研究人员精准模拟化学反应过程。适用于材料科学、催化研究等领域,特别适合已掌握分子动力学基础的进阶用户提升力场开发能力。

weixin_28365523的博客 1056

20.Labview使用子vi进行VI间的数据传递详解(模块化)

子VI(模块化)题主在题注中也提到, 子VI的建立只是为了减少程序的负担,那么我们当使用子VI的时候首先就要明确什么是子VI?什么样的程序可以作为子VI?首先我们来看NI官方给的定义,具体说明如下图所示:题主已经将重点画出来了,在官方的解释中将子VI定义为了模块化,大家可以看到创建模块化子VI的特点在于减少代码重复工作优化了程序的框架结构。把一个代码打包,需要的时候就拎出来让他处理处理,不需要的时候就让它躺在我的列表里就行了也不占用运行空间。那么创建子VI需要需要注意以下几点:①任何一个程序。

关注我,更多技术问题欢迎私聊~ 3515

数组中重复的数据

给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度), 其中有些元素出现两次而其他元素出现一次。 找到所有出现两次的元素。 你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗? 示例: 输入: [4,3,2,7,8,2,3,1] 输出: [2,3] import java.util.ArrayList; import java.util.List; class Solu...

ZS_KD 1111

使用mid360运行lio-livox对比fast-lio2

msg_type为激光雷达发出的数据格式,有livox自定义数据类型格式CustomMsg和ros标准的PointCloud2格式,因此首先需要确定激光雷达端配置的是哪种格式。可以从激光雷达的ros驱动中看到驱动端有三种格式可以选,驱动端的数字2对应lio-livox中的1,驱动端的0对应lio-livox的格式0。如果使用的是Ubuntu18.04编译完成后运行直接成功,如果使用20.04运行会报错,需要修改以下源代码。针对livox-mid360 运行lio-livox的一些问题。

z1872385的博客 1229

【中等】力扣算法题解析LeetCode287:寻找重复数

题目要求在长度为 n+1 的数组中找到唯一重复数字(数字范围 [1,n]),约束条件为不修改数组且仅用 O(1) 空间。Floyd判圈算法(快慢指针)是高效解决方案: 将数组视为链表,元素值作为下一节点索引,重复数字导致环形成。 快慢指针找相遇点,再通过数学推导确定环入口即重复数字。 Java实现通过两次循环(时间复杂度 O(n),空间 O(1))定位重复数,如示例 [1,3,4,2,2] 输出 2。

ylumwd的博客 1082

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

LeetCode287.寻找重复数

确认有环,并找到环内的一个相遇点。

2401_84667454的博客 1123

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【LeetCode题解】LeetCode 287. 寻找重复数

因此可以使用二分算法。进行二分的时候,就已经成功一半了。的数有多少个,假设我们重复的数是。继续这个过程直到找到重复数字。,说明重复的数字在区间。二分的题,当你找到要对。

weixin_53552267的博客 700

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

LeetCode 287 寻找重复数

LeetCode 287 寻找重复数 1.题目描述: 给定一个包含 n + 1 个整数的数组 nums ,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。 假设 nums 只有 一个重复的整数 ,找出 这个重复的数 。 你设计的解决方案必须不修改数组 nums 且只用常量级 O(1) 的额外空间。 示例 1: 输入:nums = [1,3,4,2,2] 输出:2 示例 2: 输入:nums = [3,1,3,4,2] 输出:3 提示: 1 <= n <= 10

qq_51451731的博客 151

golang力扣leetcode 287.寻找重复数

287.寻找重复数287.寻找重复数题解代码 287.寻找重复数 287.寻找重复数 题解 题目:给一个数组,元素大小1~n,其中有一个数出现两次,要求用O(1)的空间复杂度求出这个出现两次的元素,并且不能修改原数组 思路: 快慢指针 1.快慢指针起始位置可以在0,0 也可以在0,1,总之fast总会和slow相遇,但是我比较喜欢写在0,0,不必纠结 2.可以将数组看作一个链表,比如[2,3,1,2],下标是[0,1,2,3] 3.则[0>2,1>3,2>1,3>2]---->

清风 698

LeetCode第287题_寻找重复数

LeetCode 287题解析:查找数组中唯一重复数。题目要求在n+1长度的数组中(数字范围1-n)找出重复出现的数字。提供了二分查找和快慢指针两种解法:二分法通过统计小于中间值的元素个数来定位重复数(时间复杂度O(nlogn));快慢指针将数组视为链表,通过寻找环的入口来定位重复数(时间复杂度O(n))。包含C#、Python、C++三种实现代码,分析显示C++性能最优(48ms)。重点考察数组操作与查找算法,适合进阶算法练习的开发者。

qq_40263592的博客 1193

力扣-287.寻找重复数

这个位置一定有起码两条指向它的边,因此整张图一定存在环,且我们要找到的。就是这个环的入口,那么整个问题就等价于。由于有且仅有唯一的重复数字。

weixin_46878941的博客 495

leetcode287寻找重复数

leetcode287寻找重复数 给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。 示例 1: 输入: [1,3,4,2,2] 输出: 2 示例 2: 输入: [3,1,3,4,2] 输出: 3 说明: 不能更改原数组(假设数组是只读的)。 只能使用额外的 O(1) 的空间。 ...

LiuRenyou的博客 455

Leetcode 287 寻找重复数

Leetcode 287 寻找重复数 题目描述 给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。 说明: 不能更改原数组(假设数组是只读的)。 只能使用额外的 O(1) 的空间。 时间复杂度小于 O(n2)O(n^2)O(n2) 。 数组中只有一个重复的数字,但它可能不止重复出现一次。 问题分析 题目本身不难,暴力解遍历, 使用map索引,O(n)O(n)O(n)空间,O(n)O

梦中随笔 307

力扣287. 寻找重复数

力扣287. 寻找重复数

LNsupermali的博客 1135

LeetCode-287-寻找重复数

LeetCode-287-寻找重复数 思路 参考快慢指针的解释 [从@Damien_Undo写的题解得到启发] 使用快慢指针来解决。首先观察一下数组如何成为一个指针。假设存在一个数组【1,2,3,4,5,6,7,8,9,5】,那么下标【i】就是指针,nums[i]也是指针,指向下一个元素,从数组下标为0开始遍历,结果是【1,2,3,4,5,6,7,8,9,5】【6,7,8,9,5】【6,7,8,9,5】…【6,7,8,9,5】可以发现此时已经进入了【6,7,8,9,5】这个环中,找到重复的数其实就是找到环

HuangMuCheng的博客 116

Leetcode【快慢指针】| 287. 寻找重复数

题目 给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。 示例 1:  输入: [1,3,4,2,2]  输出: 2 示例 2:  输入: [3,1,3,4,2]  输出: 3 说明:  不能更改原数组(假设数组是只读的)。  只能使用额外的 O(1) 的空间。  时间复杂度小于 O(n2) 。  数组中只有一个重复的数字,但它可能不止重复出现一次。 来源:力扣(LeetCode) 链接

Cherils的博客 714
上一篇: LeetCode 347. 前 K 个高频元素
下一篇: LeetCode 42. 接雨水
pdfcxc
博客等级 码龄10年 23粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值