题目描述:

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

解题思路:

第一种解题思路:最简单的,暴力破解:

整个数组从第一个数字开始,遍历第一个数字之后所有数字寻找是否有与第一个数字重复的数字,没有在从第二个开始在循环遍历第二个数字之后的所有数字寻找与第二个数字是否有重复的数字,以此类推,直到查找完数组中所有元素。

python代码实现如下:

'''在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。'''
class Solution:# 这里要特别注意~找到任意重复的一个值并赋值到duplication[0]# 函数返回True/Falsedef duplicate(self, numbers, duplication):# write code heren=len(numbers)for i in range(0,n):for j in range(i+1,n):if numbers[i] == numbers[j]:duplication[0]=numbers[j]return Truereturn Falseif __name__ == '__main__':s=Solution()print(s.duplicate([2,3,2,4],[None]))  

第二种解题思路

题目中指出了一个长度为n的数组里的所有数字都在0到n-1的范围内,也就是说,数组里的元素值字最大也不会超过n,

假设一个数组长度是6,这个数组中的元素值只可能是 0 1 2 3 4 5 这几个数。那么就可以这样考虑这个问题,我们使用元素值作为索引,他不会超出数组索引范围,当我们用元素值作为数组的下标索引时,将索引到的元素+n ,遇到下一次重复的元素时,用它作为下标去索引到的元素就会大于n, 证明这个元素之前被索引到,进而能证明下标索引就是数组中重复的元素。

举一个简单的例子更好的理解上面的那段话。

A= [2, 0,1,2]   可以看出这个数组长度是 4

我们从头遍历数组

将A[0]元素 2 作为下标索引 index   即 变成了 A[index]  = A[2] 然后将A[2]的值加长度n,这里就是加4. 然后A[2]= 5了

数组A就变成了 A=[2,0,5,2],然后再将A[1]元素 0 作为下标索引 index   即 变成了 A[index]  = A[0]  然后A[0]= 6了

这些都不重要,

依次遍历,知道最后 到将A[3]元素 2 作为下标索引 index  即  A[index]  = A[2]  我们之前将A[2]+ 4 了

A[2]的值大于数组长度 n, 所以这里能判断出之前索引过 A[2]  所以数组下标 2 是 数组中重复的数字。

也是数组中第一次出现重复的数字。

python实现代码如下:

# -*- coding:utf-8 -*-
class Solution:# 这里要特别注意~找到任意重复的一个值并赋值到duplication[0]# 函数返回True/Falsedef duplicate(self, numbers, duplication):# write code heren=len(numbers)for i in range(0,n):index = numbers[i]if index>=n:index-=nif numbers[index]>=n:duplication[0]=indexreturn Truenumbers[index]+=nreturn False

第三种解题思路

????

Python寻找数组中重复数字相关推荐

  1. 原地置换法寻找数组中重复的数

    文章目录 题目描述 代码实现 题目描述 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出 ...

  2. 剑指offer——3.实现数组中重复数字查找

    知识点: 排序一个长度为n的数组需要的时间 变量和属性的区别: 变量是方法体中定义的,我们称为临时变量:属性是类体中定义的. 权限标示符只用于修饰属性和方法.不修饰变量. 方法中定义的临时变量在方法调 ...

  3. python查找数列中重复数字_在数组中找出重复的数字(异或法)

    购买本课程后,可以加51CTO学院李宁老师官方交流群:550369460注意,该群只允许购买李宁老师课程的学员进行技术交流,加群时需要提供在51CTO购买李宁老师课程的订单编号(任何一个课程的订单编号 ...

  4. 查找数组中重复数字并输出

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

  5. python: 删除数组中重复元素

    在实际开发的过程中,经常会遇到删除数据中的重复元素,怎样用python实现呢? ''' 给你一个升序排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度.元素的 ...

  6. C语言 找出数组中重复数字出现最多的数

    在堆区申请一个超级大的一维数组空间,用它的下标存原数组的数..出现一次对应下标的值+1-觉得这样方便的不然就是不停的遍历-暂时没想到其他办法-就投机一下. int Find(int *pStr,int ...

  7. 查找数组中重复数字 (二)

    #include <iostream> #include <string.h> using namespace std;void FindRepeatNum(int *arr, ...

  8. python把数组中的数字每行打印3个并保存在文档中

    arrs=[2,15,48,4,5,6,7,6,4,1,2,3,6,6,7,4,6,8] f=open('test.txt','w+') count=0 for temp in arrs:count+ ...

  9. JS实现找出数组中重复的数字的三种方法

    分享在JS中实现--找出数组中重复数字的方法的三种 法一. 排序比较法 先排序,再通过遍历比较,若相等,则添加到结果数组中,最后对结果数组进行去重,即可得到结果. function getSameNu ...

  10. 剑指offer (03):数组中重复的数字 (C++ Python 实现)

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

最新文章

  1. 栈和堆的区别(转 知乎)
  2. inline-block各浏览器兼容以及水平间隙问题解决方案
  3. 使用python连接数据库
  4. 电子政务“云”成大势
  5. Java技术:serialVersionUID作用介绍
  6. js监听地址栏变化_vue中本地储存也可以实时监听
  7. Pytest fixture参数化params
  8. vba 判断控件有无_6小时,写了一篇适合Excel小白学的VBA入门教程
  9. 1. 走进Java语言 —— Java SE
  10. 硬盘数据恢复软件FinalData使用心得
  11. 480位禅宗大德悟道因缘
  12. 细说六度分隔与相关数学模型
  13. 关于山东大学(青岛)的吐槽
  14. 改造汇文OPAC,使其通过萌校的通用扫码接口登录
  15. 前端预言 未来前端的发展方向
  16. 【C语言】分类统计字符个数(多行输入字符串)
  17. three.js网页demo展示
  18. 拍照基础方法及构图技巧
  19. modeller建模
  20. 工程技术人员以计算机为辅助工具,CAD,CAM建模方法与发展

热门文章

  1. Java程序员进阶书籍 ,看这11本书就够了
  2. 阿里巴巴 29 个屌炸天的开源项目!
  3. 根据特征码搜索基址,VC写的源码
  4. 反距离加权插值IDW计算详细步骤
  5. 应用概率统计-第六章 极限定理
  6. 缺少msvcr100.dll,小编教你丢失msvcr100.dll真正解决方法
  7. html上下两个箭头符号怎么打出来,双横向箭头符号怎么打,双横向箭头符号怎么打...
  8. Excel文件编辑保护如何取消?
  9. MySQL数据库高级(二)——自定义函数
  10. 刘一男词汇课(从abdomen到enormous):书上有路勤为径,学海无涯“懂“作舟