数组中重复的数字

OriginPro实战:5步搞定碳材料拉曼光谱D峰G峰分析(附完整数据处理流程) 本文详细介绍了使用OriginPro进行碳材料拉曼光谱D峰G峰分析的完整流程,涵盖数据预处理、多图层可视化、高精度分峰拟合等关键步骤。特别针对材料科学研究中的基线漂移、多峰重叠等问题提供专业解决方案,帮助研究者快速完成从原始数据到科研级图表的全流程分析,提升碳材料表征效率与准确性。 阅读详情

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

解决这个问题的一个简单的方法是先把输入的数组排序。从排序的数组中找出重复的数字是一件很容易的事情,只需要从头到尾扫描排序后的数组就可以了。排序一个长度为n的数组需要O(nlogn)的时间。还可以利用哈希表来解决这个问题。从头到尾按顺序扫描数组的每个数字,每扫描到一个数字的时候,都可以用0(1)的时间来判断哈希表里是否已经包含了该数字。如果哈希表里还没有这个数字,就把它加入哈希表。如果哈希表里已经存在该数字,就找到一个重复的数字。这个算法的时间复杂度是0(n).但它提高时间效率是以一个大小为O(n)的哈希表为代价的。我们再看看有没有空间复杂度是0(1)的算法。我们注意到数组中的数字都在0~n-l的范围内。如果这个数组中没有重复的数字,那么当数组排序之后数字i将出现在下标为i的位置。由于数组中有重复的数字,有些位置可能存在多个数字,同时有些位置可能没有数字。现在让我们重排这个数组。从头到尾依次扫描这个数组中的每个数字。当扫描到下标为i的数字时,首先比较这个数字(用m表示)是不是等于i。如果是,则接着扫描下一一个数字:如果不是,则再拿它和第m个数字进行比较。如果它和第m个数字相等,就找到了一个重复的数字(该数字在下标为i和m的位置都出现了);如果它和第m个数字不相等,就把第i个数字和第m个数字交换,把m放到属于它的位置。接下来再重复这个比较、交换的过程,直到我们发现个 重复的数字。以数组{2, 3, 1, 0,2, 5, 3}为例来分析找到重复数字的步骤。数组的第0个数字(从0开始计数,和数组的下标保持一-致) 是2,与它的下标不相等,于是把它和下标为2的数字交换。交换之后的数组是(1, 32.0.2,5.3),此时第0个数字是1.仍然与它的下标不相等,继续把它和下标为1的数字3交换,得到数组{3,1, 2,0,2,5,3}。接下来继续交换第0个数字3和第3个数字0,得到数组{0, 1,2,3,2,5, 3}。此时第0个数字的数值为0,接着扫描下一个数字。在接下来的几个数字中,下标为1、2、3的3个数字分别为1、2、3,它们的下标和数值都分别相等,因此不需要执行任何操作。接下来扫描到下标为4的数字2。由于它的数值与它的下标不相等,再比较它和下标为2的数字。注意到此时数组中下标为2的数字也是2,也就是数字2在下标为2和下标为4的两个位置都出现了,因此找到一个重复的数字。

def duplicate(lis):
    if lis ==None or len(lis) == 0:
        return False
    Len = len(lis)
    for i in lis:
        if i < 0 or i >Len-1:
            return False
    Flag = True
    for i in range(Len):
        while i!=lis[i]:
            m = lis[i]
            if m == lis[m]:
                Flag = False
                break
            lis[i],lis[m] =lis[m],lis[i]
        if Flag==True:
            print(" 没找到重复数子")
            return False
        else:
            return lis[i]

题目二:不修改数组找出重复的数字。
在一个长度为
n+1的数组里的所有数字都在1~n的范围内,所以数组中至少有一个数字是重复的。请找出数组中任意一个重复的数字,但不能修改输入的数组。例如,如果输入长度为8的数组{2,3,5,4,3,2,6,7},那么对应的输出是重复的数字2或者3。

这题看起来和上面的面试题类似。 由于题目要求不能修改输入的数组我们可以创建一个长度为的辅助数组, 然后还把原数组的每个数字复制到辅助数组。如果原数组中被复制的数字是m,则把它复制到辅
助数维中下标为m的位置。这样很容易就能发现哪个数字是重复的。由于需要创建一个数组,该方案需要Oy)的辅助空间。接下来我们尝试避免使用O(m的辅助空间。为什么数组中会有重复的数字?假如没有重复的数字,那么在从1到n的范围里只有n个数字。由于数组里包含超过n个数字,所以-一定包含了重复的数字。看起来在某范围里数字的个数对解决这个问题很重要。我们把从1到n的数字从中间的数字m分为两部分,前面一半为1到m,后面一半为m+1到n。如果1到m的数字的数目超过m,那么这一半的区间里一定包含重复的数字;否则,另一半m+1~n的区间里一定包含 重复的数字。我们可以继续把包含重复数字的区间一分为二, 直到找到一个重复的数字。这个过程和二分查找算法很类似,只是多了一步统计区间里数字的数目。我们以长度为8的数组{2,3,5, 4.3.2,6, 7}为例分析查找的过程。根据
题目要求,这个长度为8的所有数字都在1到7的范围内。中间的数字4把1到7的范围分为两段,一段是1到4, 另一段是5到7。接下来我们统计1到4这4个数字在数组中出现的次数,它们共出现了5次,因此这4个数字中一定有重复的数字。接下来我们再把1~4的范围分为二,一段是1、 2两个数字,另一
段是3、4两个数字。数字1或者2在数组中一共出现了两次。我们再统计数字3或者4在数组中出现的次数,它们一 共出现了三次。这意味着3、两个数字中一定有一个重复了。我们再分别统计这两个数字在数组中出现的次数。接着我们发现数字3出现了两次,是一个重复的数字。

# 面试题3-2不修改数组找重复数字
def getDupliation(lis):
    if lis ==None or len(lis)==0:
        return False
    Len= len(lis)
    for i in lis:
        if i <1 or i >Len-1:
            return False
    start ,end = 1,Len-1
    while end>=start:
        middle = start +int((end-start)/2)
        count = countRange(lis,start,middle)
        if end ==start:
            if count >1:
                return start
            else:
                print("无重复")
                break
        if count>(middle-start+1):
            end = middle
        else:
            start = middle+1
    return False
def countRange(lis,start,end):
    count = 0
    for i in lis:
        if i>=start and i<=end:
            count =count+1
    return count
if __name__ == '__main__':
    lis = []
    print(getDupliation(lis))
测试人必看!正交表与Allpairs工具对比:如何选择最适合你的组合测试方案? 本文深入对比了正交表、PICT与Allpairs三种主流组合测试方案,帮助测试人员根据项目场景做出最佳选择。文章分析了各自的核心原理、优劣势及适用场景,特别强调了在涉及复杂约束时PICT工具的强大功能,并提供了从原理学习到CI/CD集成的实战选型指南。 阅读详情

相关推荐

二维紧束缚模型求解程序

假如我们已经推导出了二维紧束缚模型的哈密顿量矩阵H(kx,ky)的解析形式,那么在整个布里渊区对角化矩阵就可以得到能带。从技术上说这里面有以下几个问题。 1. 缺少实空间和倒空间的坐标,使得能带难以和布里渊区高对称点对应。 2. 最容易处理的布里渊区是矩形,对于其他多边形,如果全布里渊区mesh画费米面有一定技术困难。 因此一个好的处理框架是首先给出实空间原子坐标,给出实空间哈密顿量,...

wwxy1995的博客 4083

找出数组中重复的数字

在一个长度为n的数组中,所有的数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数组重复了几次。请找出数组中任意一个重复的数字。 例:输入长度为7的数组{2,3,1,0,2,5,3}, 对应的输出的重复的数字是2或3。 方法1:先排序在查找 方法2:利用哈希表 从头到尾扫描每个数字,每扫描一个数字,都可以用O(1)的时间来判断哈希表是否包含了该数字。...

斜月&三星 2957

手把手教你设计STM32的JTAG电路:从原理图到PCB布局(含JLINK连接详解)

本文详细介绍了STM32的JTAG电路设计全流程,从核心原理、接口规范到PCB布局布线技巧,特别包含JLINK调试器的连接与配置方法。通过信号滤波、上拉配置和防反接保护等关键设计要点,帮助开发者构建稳定可靠的JTAG调试环境,提升嵌入式开发效率。

weixin_29159441的博客 388

数组中重复的数字(数组)

题目描述:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 思路一: 不需要额外的数组或者hash table来保存,题目里写了数组里数字的范围保证在0 ~ n-1 之间,所以可

DirBee的博客 873

Xilinx PL端DP显示接口开发实战(一)——环境搭建与硬件选型

本文详细介绍了Xilinx PL端DP显示接口开发的环境搭建与硬件选型实战经验。从Vivado和Vitis 2021.1版本的软件安装要点,到DP141和MCDP6000芯片的选型建议,再到DP1.4接口的RX/TX方向开发关键点,为开发者提供了全面的技术指导。文章还分享了IP核配置、BD原理图设计以及常见问题排查的实用技巧,帮助开发者高效完成Xilinx DP接口开发项目。

weixin_29250573的博客 174

智能座舱-语音交互系统

从什么是智能座舱、智能座舱的发展驱动因素、智能座舱的构成要素三个方面梳理我对智能座舱的基础认识之后,为了加深“智能座舱产品入门”课程中语音交互部分知识的理解,我从什么是语音交互、语音交互的底层技术、智能座舱的语音交互等方面,对智能座舱语音交互系统相关的知识进行了梳理与总结。

GUOSA0928的博客 1442

如何在给定的整数数组中找到重复的数字?

解一、 最先涌现的想法是遍历一遍数组,用hash表记录每一个数字出现的次数; 用空间换时间 解二、 剑指offer解法 重新排序数组每个数字,当扫描到数字m的时候判断下标为i的数字是否等于m:如果是,就寻找下一个;如果不是,就判断下标为m的对应的数字是否等于m,如果它与第m个数字相等,就等于找到了一个重复的数字,如果不相等就把第i个数与第m个数交换位置,把m放在其对应的下标m的位置。 ...

一个程序媛的成长记录❤ 5971

常见的十大量化投资策略(附源码)

量化投资策略是利用量化的方法,进行金融市场的分析、判断和交易的策略、算法的总称。著名的量化投资策略有以下10种(注:策略源码模板不能直接用于实盘交易,仅供探讨交流) 01、海龟交易策略 海龟交易策略是一套非常完整的趋势跟随型的自动化交易策略。这个复杂的策略在入场条件、仓位控制、资金管理、止损止盈等各个环节,都进行了详细的设计,这基本上可以作为复杂交易策略设计和开发的模板。 海龟交易策略源码:https://www.myquant.cn/docs/python_strategyies/110 0.

小壁虎的春天 2万+

3. 数组中重复的数字

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

YouMing_Li的博客 3860

Arduino创意作品实战案例:手把手教你做温控风扇

通过这个实用的arduino创意作品,轻松实现温度感应与风扇自动控制,结合传感器与编程逻辑,打造智能散热系统,是入门者理想的arduino创意作品实践项目。

weixin_42311427的博客 608

CSP-J2019普及组复赛T4:加工零件

CSP-J2020普及组复赛T1:优秀的拆分,广度优先遍历求最短路。

少儿编程乔老师 1854

java编程:定义一个有重复数字的数组,将数组中的重复数字删除,得到一个没有重复数字的数组

定义一个有重复数字的数组,将数组中的重复数字删除,得到一个没有重复数字的数组 完整代码如下: public class ArraysDemo { public static void main(String[] args) { int count = 0; int[] a = { 12, 20, 5, 16, 15, 20, 20, 45, 23, 1 }; for (int i =...

qq_36653524的博客 2859

手把手教你学GPU的KMD专栏--3.4 中断处理机制与优化

记住,中断处理是GPU与CPU通信的"桥梁",没有高效的中断处理,GPU的性能将无法充分发挥。KMD通过"快进快出"原则、事件标志机制、GPU本机围栏等技术,实现高效、低延迟的中断处理。:GPU本机围栏机制允许GPU在满足特定条件(如围栏值达到某个阈值)时才触发中断,而不是每次围栏更新都触发中断,从而显著减少CPU唤醒次数,降低功耗。正如Microsoft GPU架构师在2022年WinHEC大会上指出:"没有好的中断处理,再强大的GPU也会被系统延迟拖垮。:多个GPU设备共享中断,导致中断处理混乱。

MHD0815的博客 112

数组之数组中重复的数字

1.本题知识点    数组,规律 2. 题目描述   在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 3. 思路    数组里数字的范围保证在0 ~ n-1 之间,所以可以利用现有...

守得云开见月明 892

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。

题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 题目分析 这道题其实很简单,就是分析数组中是否有重复的数字,如果没有则是false,否则是true,如果有的话,需要输出一...

qq_29462849的博客 3669

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

找出数组中的重复数字

题目:找出数组中的重复数字 在一个长度为n的数组里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有哪几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者是3。 方法一:排序,将数组的数字排序,在排好序的数组中找到重复的数组,时间复杂度很大O(nlogn)。 方法二:把每一个数字都扫描,看与其他剩下的数字是否相同。时间复杂度是O(n^2),两次for循环找出相同的数。

风也温柔呀 2001

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

数组之—重复数字

题目一: 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。 法一:利用hash数组来求解             定义一个hash[n]={0}; 遍历数组,若hash[num

Poem~ 434
上一篇: SlowFast Networks for Video Recognition 用于视频识别的慢速网络(未完)
下一篇: 面试题4:二维数组中的查找
learning112358
博客等级 码龄9年 35粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值