题目描述

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

# -*- coding:utf-8 -*-
class Solution:# 这里要特别注意~找到任意重复的一个值并赋值到duplication[0]# 函数返回True/Falsedef duplicate(self, numbers, duplication):# write code hereres = []for item in numbers:if item in res:duplication[0]=itemreturn Trueelse:res.append(item)return False

方法二:
排序 判断相邻位置是否存在相同数字

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

方法三:
链接:https://www.nowcoder.com/questionTerminal/623a5ac0ea5b4e5f95552655361ae0a8?answerType=1&f=discussion
来源:牛客网

数组的长度为 n 且所有数字都在 0 到 n-1 的范围内,我们可以将每次遇到的数进行"归位",当某个数发现自己的"位置"被相同的数占了,则出现重复。
扫描整个数组,当扫描到下标为 i 的数字时,首先比较该数字(m)是否等于 i,如果是,则接着扫描下一个数字;如果不是,则拿 m 与第 m 个数比较。如果 m 与第 m 个数相等,则说明出现重复了;如果 m 与第 m 个数不相等,则将 m 与第 m 个数交换,将 m “归位”,再重复比较交换的过程,直到发现重复的数 举个栗子:
以数组 {2,3,1,0,2,5,3} 为例
当 i = 0 时,nums[i] = 2 != i,判断 nums[i] 不等于 nums[nums[i]],交换 nums[i] 和 nums[nums[i]],交换后数组为:{1,3,2,0,2,5,3}
此时 i = 0,nums[i] = 1 != i,判断 nums[i] 不等于 nums[nums[i]],交换 nums[i] 和 nums[nums[i]],交换后数组为:{3,1,2,0,2,5,3}
此时 i = 0,nums[i] = 3 != i,判断 nums[i] 不等于 nums[nums[i]],交换 nums[i] 和 nums[nums[i]],交换后数组为:{0,1,2,3,2,5,3}
此时 i = 0,nums[i] = 0 = i,继续下一组
当 i = 1,nums[i] = 1 = i,继续下一组
当 i = 2,nums[i] = 2 = i,继续下一组
当 i = 3,nums[i] = 3 = i,继续下一组
当 i = 4,nums[i] = 2 != i,判断 nums[i] 等于 nums[nums[i]],出现重复,赋值返回

Q50 数组中重复的数字相关推荐

  1. 剑指offer: 面试题03. 数组中重复的数字

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

  2. 找出数组中重复的数字---多思路

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

  3. 数组-数组中重复的数字(set方法)

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

  4. leetcode-找出数组中重复的数字

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

  5. 剑指offer 面试题三 找出数组中重复的数字

    1 import org.junit.Test; 2 3 import java.util.Arrays; 4 import java.util.HashSet; 5 6 public class D ...

  6. python --- 倒序输出数组中重复的数字

    #coding=utf8 输出数组中重复的数字 #1.对比判断是否存在重复的数字,是则加入k:2.判断要加入的数字在k是否已存在,若已存在则跳过 def sum(L): for i in range( ...

  7. Python剑指offer:数组中重复的数字

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

  8. Leetcode 剑指 Offer 03. 数组中重复的数字 (每日一题 20210614)

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

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

    剑指 Offer 03. 数组中重复的数字 思路一:先排序,然后找到最近的两个相邻的一样数返回 class Solution {public:int findRepeatNumber(vector&l ...

最新文章

  1. 第19章 解释器模式(Interpreter Pattern)
  2. 我这样写代码,比直接使用 MyBatis 效率提高了 100 倍
  3. ActionContext_、ValueStack、Stack_Context关系
  4. 拼接字符串的两种方式
  5. 将Java向前推进? 一个定义。 一年回顾。
  6. 手写 Object.create
  7. canvas 绘制直线 并选中_javascript自学记录:canvas绘图
  8. Android 四大组件之一(Activity)
  9. Codeforces Round #301 (Div. 2)
  10. ubuntu16.04安装nvidia-384
  11. php 开启 ziparchive,php ZipArchive类使用实例详解
  12. FFmpeg 转码压缩
  13. 徒手下载谷歌图书(google books)
  14. 转:组态软件测评∣WinCC、Citect、LabVIEW、InTouch、Ingnition,你更喜欢用哪个?
  15. W10笔记本电脑弄成WIFI
  16. pixel cra_cra到pwa
  17. 【专利】如何画专利流程图(逻辑图)
  18. 什么是MySQL数据空洞?
  19. 计算长方体体积(3分)
  20. PSO粒子群算法优化BP神经网络(PSO-BPNN)回归预测MATLAB代码

热门文章

  1. linux下mysql5.6版本初始化数据库密码
  2. 西瓜书学习笔记第2章(模型评估与选择)
  3. Cassandra,NoSQL中的兰博基尼
  4. 差分时钟、DQS与DQM - DDRx的关键技术介绍
  5. DEV05 GBase 8a MPP Cluster 数据库性能优化
  6. 关于c / c++中power_bound的使用
  7. 【CSS】课程网站 Banner 制作 ① ( Banner 栏测量 | Banner 盒子模型代码 | 代码示例 )
  8. Origin 绘制分段函数图
  9. C1. Simple Polygon Embedding(几何)
  10. RN + Flutter