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

输入:
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3

限制:

2 <= n <= 100000

解法:

开始思路:
嵌套的for循环解决(耗时长,占用内存;不推荐):

class Solution {public int findRepeatNumber(int[] nums) {for(int i=0;i<nums.length;i++){for(int j=i+1; j<nums.length; j++){while(nums[i] == nums[j]){return nums[i];}}}return -1;}
}

参考解法:

解法1作者链接:
利用数据结构特点,容易想到使用哈希表(Set)记录数组的各个数字,当查找到重复数字则直接返回。

算法流程:
①初始化: 新建 HashSet ,记为 dic ;
②遍历数组 nums 中的每个数字 num :
③当 num在 dic 中,说明重复,直接返回 num ;
④将 num添加至 dic 中;
⑥返回 -1。本题中一定有重复数字,因此这里返回多少都可以。

复杂度分析:
时间复杂度 O(N): 遍历数组使用 O(N) ,HashSet 添加与查找元素皆为 O(1) 。
空间复杂度 O(N) : HashSet 占用 O(N) 大小的额外空间。

class Solution {public int findRepeatNumber(int[] nums) {Set<Integer> dic = new HashSet<>();for(int num : nums) {if(dic.contains(num)) return num;dic.add(num);}return -1;}
}

解法2作者链接

题目说明尚未被充分使用,即 在一个长度为 n 的数组 nums 里的所有数字都在 0 ~ n-1 的范围内 。 此说明含义:数组元素的 索引 和 值 是 一对多 的 关系。
因此,可遍历数组并通过交换操作,使元素的 索引 与 值 一一对应(即 nums[i] = i)。因而,就能通过索引映射对应的值,起到与字典等价的作用。

遍历中,第一次遇到数字 xx 时,将其交换至索引 xx 处;而当第二次遇到数字 xx 时,一定有 nums[x] = x ,此时即可得到一组重复数字。

算法流程:
①遍历数组 nums ,设索引初始值为 i = 0 :
②若 nums[i] = i: 说明此数字已在对应索引位置,无需交换,因此跳过;
③若 nums[nums[i]] = nums[i] : 代表索引 nums[i] 处和索引 i处的元素值都为 nums[i],即找到一组重复值,返回此值 nums[i];
否则: 交换索引为 i和 nums[i]的元素值,将此数字交换至对应索引位置。
④若遍历完毕尚未返回,则返回 -1。

复杂度分析:
时间复杂度 O(N) : 遍历数组使用 O(N),每轮遍历的判断和交换操作使用 O(1) 。
空间复杂度 O(1) : 使用常数复杂度的额外空间。

leetcode-找出数组中重复的数字相关推荐

  1. 剑指offer 有人相爱,有人夜里开车看海,有人leetcode第一题都做不出来(leetcode有空就刷系列之找出数组中重复的数字)

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

  2. 图解面试题:找出数组中重复的数字?

    今天分享的题目来源于 LeetCode 上的剑指 Offer 系列 面试题03. 数组中重复的数字. 题目链接:https://leetcode-cn.com/problems/shu-zu-zhon ...

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

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

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

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

  5. 13. 找出数组中重复的数字【难度: 简单 / 知识点: 模拟】

    13. 找出数组中重复的数字[难度: 简单 / 知识点: 模拟] 方法一: map 计数 时间复杂度O(nlongn) 空间复杂度多了一个二叉树 class Solution {public:int ...

  6. java如何找重复数字_Java如何找出数组中重复的数字

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

  7. 01、找出数组中重复的数字

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

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

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

  9. AcWing之找出数组中重复的数字

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

  10. 找出数组中重复的数字

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

最新文章

  1. 斯坦福全球AI报告:人才需求两年暴增35倍,中国机器人部署量涨500%
  2. android.os.NetWorkOnMainThreadExcetion
  3. 一个网络公司的任职要求
  4. C++递归求数组最大值、平均值、求和
  5. php爬虫:知乎用户数据爬取和分析
  6. IOS https抓包及10.3.3版本证书不生效问题解决
  7. 【ExtJS】关于alias和xtype
  8. listview的使用一例
  9. {Java}一个有关类属性初始化的有趣儿情况
  10. 青花瓷抓HTTPS数据
  11. 真 Navicat Premium 12.0.27 for Mac 破解版
  12. 交互设计的职能:交互设计师具体做什么
  13. Ant design分析后台首页
  14. (CVPR 2020) PointGroup: Dual-Set Point Grouping for 3D Instance Segmentation
  15. 怎样为受惊吓的孩子叫魂
  16. 计算机无法访问ftp站点,为什么我的电脑无法访问FTP服务
  17. UVM中的sequencer
  18. 正则表达式-2021
  19. 计算机专业技能学习表现总体评价,【计算机专业论文】中职学校计算机专业课堂教学评价(共2323字)...
  20. WY的Java学习笔记(1)基础

热门文章

  1. Spring JDBC Template
  2. sql语句数据行操作-虽然一般不用
  3. JBoss Seam 3.0.0.Beta2 发布
  4. argparse.ArgumentParser()用法解析
  5. Xilinx_ISE 14.7在Win10下选择“open project”崩溃闪退的问题
  6. matlab实现滑动平均滤波(二)
  7. win10 php mysql_win10 下 apache php mysql 开发环境安装
  8. openpose_net随机搜索网络源代码
  9. 遗传算法就是创造力的本质
  10. 使用pytorch建立LSTM神经网络训练识别手写数字