数组中重复的数字03---剑指offer

华硕ROG幻16笔记本电脑模式切换管理工具完美替代华硕奥创中心管理工具 参考文档1这个工具可以完美替代华硕奥创中心工具,可以定制化不同模式下的CPU、GPU、风扇转速、电池计划等。是由华硕开发人员开发的一个纯绿色的系统管理工具。直接展示启动后的工具界面效果图:这个工具也可以一键式停止正在运行的华硕ASUS服务,减少不必要的资源消耗。 阅读详情

一本好书,书已看完(作者已提供所有习题编程源码),不多说。现在第二遍准备慢慢刷题来提高编码实践能力。先从简单入手!虽然是一个简单的题目,但是知易行难!(虽然看过书,但是自己实现的时候对数组元素的合法性检查就没有考虑到)

题目:找出数组中重复的数字。

在一个长度为n的数组里的所有的数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个重复了几次。请找出数组中任意一个重复的数字。例如,如果输出的长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3.

下面的代码目前只是阅读书上的然后自己简单的思考实现一遍。

算法思想:一个数组长度为n,数字都在0~n-1的范围内,不借助外部辅助空间,时间复杂度0(n)。算法本质---就是利用数组下标对数组排序(a[i] = i)(这里本质还是利用数字下标排序,通过比较值和下标,将a[i]放到数组的第i个位置)。 优点: 每个 数字最多只需要交换两次就能找到属于自己的位置。

算法思路:

//从第0个元素开始比较,首先比较元素a[0]与其下标是否相等
//1. 如果相等,下一元素
//2. 如果不相等,
//2.1 先判断a[i] 和 a[a[i]]是否相等,
//2.1.1 如果相等,则该数字就是找到的第一个重复的数字 
//2.1.2 如果不相等,则交换a[i] 和 a[a[ai]] 的位置,这样a[i] = i. 
//3. 重复步骤1,直到找到了第一个重复的数字     

代码实现:

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int duplicate(int Array[], int length, int* value)
{
    int i = 0 , j = 0 , temp = 0;
    
    //参数合法性检查 
    if( (Array == NULL) || (length <= 0 ) )
    {
        return -1;
    }
    
    //数组参数合法性检查 自己实现的时候就没有考虑到这个,虽然看过书了 
    for(j = 0; j < length; j++)
    {
        if( (Array[i] < 0) && (Array[i] > length -1) )
            return -1;
    } 
    
    printf(" length = %d\n ",length );
    
    for(i = 0; i < length ; i++ )
    {
        
        while(Array[i] != i)
        {
            if(Array[i] == Array[Array[i]])
            {
                *value = Array[i];
                
                return 1;
            }
            
            temp = Array[i];
            Array[i] = Array[temp];
            Array[temp] = temp;
        }
    }

    return -1;
} 

int main(int argc, char *argv[]) {
	
	int value = -1;
    int ret = -1;
    int test1[] = {3,1,2,6,2,5,3};

    ret = duplicate(test1, sizeof(test1)/sizeof(test1[0]), &value);
    
    if(ret)
        printf("duplicate number is %d\n",value);
	
	return 0;
}

运行结果:

原书的作者测试代码考虑的非常全面!这里主要是重在算法实现,原书作者的代码更具有学习参考价值!这里就当学习笔记!

django安装mysqlclient (Windows下正确安装mysqlclient) 由于本人也是初学Python和django。本人使用的Python版本是3.7所以连接MySQL数据库需要安装数据驱动,对应Python3的数据驱动是mysqlclient。因此本人习惯性的使用命令pip install mysqlclient,结果安装失败 (venv) C:\Users\songlihui\PycharmProjects\autotest&gt;pip install my... 阅读详情

相关推荐

ENVI与Sarscape协同处理哨兵一号数据的完整流程解析

本文详细解析了利用ENVI与Sarscape软件协同处理哨兵一号(Sentinel-1)SAR数据的完整工作流程。从环境搭建、数据导入与裁剪,到核心的DEM辅助多时相配准、斑点噪声滤波,再到最终的地理编码与辐射定标,提供了标准化的操作指南与实用技巧,帮助用户高效地将原始雷达数据转化为可用于分析的地理编码产品。

weixin_29251131的博客 339

剑指 Offer 03. 数组中重复的数字

⭐️问题描述⭐️ 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 1: 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 限制: 2 <= n <= 100000 【来源】力扣(LeetCode) 【链接】https://leetcode-cn.com/problems/shu-zu-

yunfan 1776

基于相位检测与锁相环的DIY超声波风速仪设计与实现

相位检测是信号处理中的一项基础技术,它通过测量两个周期信号之间的相位差来获取信息。其核心原理在于,当信号在介质中传播时,外部因素(如风速)会改变其传播速度,从而导致接收端信号的相位发生偏移。锁相环(PLL)是实现高精度相位检测的关键电路,它能动态调整本地振荡器的频率,以跟踪并锁定输入信号的相位,从而将微小的相位变化转换为易于测量的电压信号。这项技术的工程价值在于其对电路精度要求相对较低,鲁棒性好,非常适合低成本、高灵敏度的测量应用。在气象监测、工业传感和消费电子等领域,相位检测技术被广泛用于风速风向测量、位

weixin_29540599的博客 385

剑指offer 03.数组中的重复数字(四种办法!哎,就是全!)

03.数组中的重复数字 一、题目: 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 1: 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 限制: 2 <= n <= 100000 来源:力扣(LeetCode) 二、思路和代码: 方法一:暴力超市 双重循环,从头到尾,依次比较这个数字和它的后面数字比较。时

sweetorange_的学习笔记 380

小红书x-mini签名逆向实战:Frida动态Hook与算法还原

在移动App协议分析中,请求签名机制是保障接口安全的核心技术,其本质是客户端对请求参数、时间戳、设备指纹等要素进行加密认证的过程。理解签名原理需掌握Native层加密流程、JNI调用机制及密钥动态派生逻辑。Frida作为主流动态插桩工具,能绕过符号剥离、字符串加密和控制流混淆等反分析手段,在函数执行瞬间捕获寄存器状态、内存数据与调用上下文,实现签名算法的完整还原。该技术广泛应用于合规内容监测、API自动化调用与竞品协议研究等工程场景。本文聚焦小红书x-mini签名这一典型样本,详解从JNI_OnLoad定位

weixin_31264565的博客 457

【ECCV 2024】动态范围直方图自注意力DHSA,即插即用!

直方图自注意力机制,将空间特征按强度分段并进行分组,然后在各个分组内或分组间应用自注意力,以选择性地关注具有动态范围的空间特征,并处理长距离内相似退化的像素。

qq_43303160的博客 1844

3. 数组中重复的数字

文章目录剑指 Offer 03. 数组中重复的数字解法一:建立一个新数组打卡标记解法二:移动元素让下标和值相对应解法三:将数组排序,判断相邻两个数是否相等解法四:利用HashSet记录,出现重复数字时立马返回结果即可第三题的扩展题:不修改数组找出重复的数字 LeetCode 287287. 寻找重复数思路使用分治法 剑指 Offer 03. 数组中重复的数字 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了

YouMing_Li的博客 3860

WPS接入DeepSeek,实现AI辅助功能

总的来说,借助 WPS 中宏功能与 DeepSeek 大模型的结合,文档处理、内容创作和数据分析等任务都能更加智能化、自动化。这不仅大幅提升了工作效率,也为办公场景带来了全新的智能化办公体验。

运维老生常谈 3803

《剑指offer》03.数组中重复的数字

03.找出数组中重复的数字1.找出数组中重复的数字。2.不修改数组找出重复的数字 1.找出数组中重复的数字。 问题描述: 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例: 输入: [2,3,1,0,2,5,3] 输出: 2或者3 限制: n<=2<=100000 测试用例: 长度为n的数组包含一个或多个重复的数字。 数组中不包含重复的数字。 无效

m0_57105290的博客 719

把时间当成数据:SAP ABAP 里的 DATS/TIMS 与 DATN/TIMN,怎么选才不踩坑

SAP项目中日期时间字段的陷阱与优化 日期时间字段(DATS/TIMS)在SAP项目中看似简单却常引发事故,主要问题包括: 非法日期(如20201331)入库后,在月结、对账时爆发异常 空值被处理为00000000导致排序错误 ABAP提供两种处理方案: 经典类型DATS/TIMS:存储为字符格式,校验宽松易存脏数据 HANA原生类型DATN/TIMN:数据库级校验,写入即拦截非法值 优化建议: 在接口层和入库前进行严格校验 新项目优先使用DATN/TIMN类型 对遗留数据使用DATS_IS_VALID等函

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 181

【实战圣经】YOLOv8-pose姿态估计模型从训练到RK3588部署:让边缘端骨骼识别速度突破60FPS

本教程从“模型训练-转换-边缘部署”全链路拆解了YOLOv8-pose姿态估计方案在RK3588上的落地过程,每一步都经过实战验证。无论是智能健身的动作实时纠正,还是工业设备的关键部件姿态检测,这套流程都能让你以最低成本实现高精度、高实时性的姿态估计应用。如果你在实践中遇到模型转换报错、部署性能不达标等问题,可聚焦某一环节深入优化——毕竟,让AI在边缘端“精准捕捉每一个关键点”,才是技术驱动场景创新的核心。

m0_71589036的博客 251

剑指offer数组题目汇总(面试必备)

剑指 offer 数组题目汇总(C++版)   1、数组中重复的数字 一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。找出数组中任意一个重复的数字。 思路1:先排序,在遍历。 时间复杂度:O(nlog(n)) ,空间复杂度:O(1) 思路2:遍历数组时查询哈希表是否已有这个数,有就返回,没有就添加。时间复杂度:O(n), 空间复杂度:O(n) 思路1和2比较简单,代码就不贴了。主要说一下下面的方

Destiny_shine的博客 536

AMBA-CHI协议详解(二)

读事务,写事务,原子事务,Stash事务,Dataless事务,DVM事务,Retry事务。

Crazzy_M的博客 6650

剑指Offer03.数组中重复的数字 c++实现

剑指Offer03.数组中重复的数字 写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点 1. 使用集合 思路就是利用集合不能有重复数字的这个特性,把数组中的元素依次送入集合当中,判断一下这个元素是否被送入,如果已经被送入,那么返回该值,这样得到的是第一个重复的元素 class Solution { public: int findRepeatNumber(vector<int>& nums) { set<int>

y152543654的博客 496

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

剑指Offer系列(java版,详细解析) 03. 数组中重复的数字

题目一 题目描述 剑指 Offer 03. 数组中重复的数字 难度简单 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 1: 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 限制: 2 <= n <= 100000 测试用例 长度为n的数组包含一个或多个重复的数字。 数组中不包含重复的数字。 无效输

Viper的程序员修炼手册 4588

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

剑指offer 03.数组中重复的数字

剑指offer 03.数组中重复的数字 问题描述: 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例: 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 # solo class Solution: def findRepeatNumber(self, nums: List[int]) -> int: # 采用

Hanfeige的博客 244

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

[剑指 offer]03 数组中重复的数字 Java实现

题目 剑指 Offer 03. 数组中重复的数字 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 1: 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 代码 这道题思路很快 我采用的方法是一个额外数组用于计数总共出现了多少次 如果这个数组超过了1的话那么就直接输出 如果词题数的最大值不是n-1的话那么用HashSet.

BedivereAlter的博客 208

剑指 Offer 03. 数组中重复的数字 JavaScript解决

剑指 Offer 03. 数组中重复的数字 JavaScript解决问题描述代码 问题描述 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 代码 var findRepeatNumber = function(nums) { for( let i = 0 ; i<

ryyzxf的博客 216

LeetCode剑指Offer03.数组中重复的数字

LeetCode剑指Offer03.数组中重复的数字 题目:在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 1: 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 限制: 2 <= n <= 100000 题解 1.暴力循环 class Solution { public: int findRepeatNumber(vect

qq_45035709的博客 460

剑指Offer03_数组中重复的数字

剑指 Offer 03. 数组中重复的数字 题目:找出数组中重复的数字。 LeetCode地址:剑指 Offer 03. 数组中重复的数字 描述:在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例: 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 限制:2 <= n <= 100000 题解: 方法一:使用集合

Ning_chuan的博客 243

剑指offer 03找出数组中重复的数字

剑指offer 03题目描述我的代码更简便的代码分析 题目描述 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 1: 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 限制: 2 <= n <= 100000 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/shu-zu-zho

qq_44077239的博客 223

剑指 offer 面试题精选图解 03 . 数组中重复的数字

今天分享的题目来源于 LeetCode 上的剑指 Offer 系列 面试题03. 数组中重复的数字。 题目链接:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/ 一、题目描述 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n...

程序员吴师兄的博客 548

剑指 Offer 03. 数组中重复的数字(java多解版)

题目:剑指 Offer 03. 数组中重复的数字 描述:在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例:输入:[2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 来源:力扣(LeetCode) 限制:2 <= n <= 100000 分析:给定一个指定范围的无序数组,找出其中的重复数字,可以又多个重复数字,但只要求找出其一即可; 解法一: 排

Tstr的博客 327

《剑指offer 03》数组中重复的数字

找出数组中重复的数字。

小邢的博客 226

LeetCode 之 剑指 Offer 03. 数组中重复的数字(Java)

LeetCode 之 剑指 Offer 03. 数组中重复的数字(Java),在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。创建重复数组进行遍历判断。

渣渣的夏天 552
上一篇: 安静的周末---有感
下一篇: 不修改数组查找数组中任意一个重复的数字
coding__madman
博客等级 码龄11年 188粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值