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

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

示例 1:

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

限制:

2 <= n <= 100000

解题思路:

  • 1.利用HashSet,因为HashSet不允许集合中出现重复的元素,通过将数组元素添加到HashSet中,如果元素添加失败,返回false,则元素重复,返回该元素。
  • 2.因为元素值小于数组长度,这里利用元素下标,通过swap函数交换元素位置,将数组中的元素值与其下标值一一对应,即元素值=下标值,若在交换的过程中存在,要交换的元素值==交换位置的元素值,则交换失败,该元素在数组中重复。

代码实现

class Solution{//方法1public int findRepeatNumber(int [] nums){//hash表Set<Integer> set=new HashSet<>();int res=-1;for (int num:nums){//add失败,返回false 则找到了某个重复的元素if (!set.add(num)){res=num;break;}}return res;}//方法2public int findRepeatNumber2(int [] nums) {int n = nums.length;for (int num : nums) {if (num < 0 || num > n) {return -1;}}//利用下标交换元素,即下标值=元素值for (int i = 0; i < n; i++) {while (nums[i] != i && nums[nums[i]] != nums[i]) {//交换nums[i]和nums[nums[i]],如交换nums[0]=2和nums[2]=1swap(nums,i,nums[i]);}if (nums[i] != i && nums[nums[i]] == nums[i]) {return nums[i];}}return -1;}public void swap(int[] nums, int i, int j) {int temp = nums[i];nums[i] = nums[j];nums[j] = temp;}
}

找出数组中重复的数字---多思路相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. php fileputcontents,在php中file_put_contents函数起什么作用呢?
  2. linux下grub的修复
  3. 代码精进之路 码农到工匠pdf_VBA代码解决方案第065讲试看内容
  4. mysql主从库配置方法
  5. Shape Context
  6. python3单例-python3如何运行文件夹python单例模式
  7. tfidf关键词提取_基于TextRank提取关键词、关键短语、摘要,文章排序
  8. apache启服务命令_linux系统下apache服务的启动、停止、重启命令
  9. Firefox下去掉密码自动填充
  10. 【sklearn第十四讲】决策树之分类篇
  11. linetv_LINE TV台湾版
  12. 聚沙——关于禁用UAC的解决办法(Win8 System)
  13. 两行代码实现精简的网站访问量统计(不蒜子)
  14. 打卡国潮新风尚@东莞隐贤山庄#玩转主题乐园#
  15. Windows系统鼠标右键菜单添加打开cmd终端
  16. java中图片排版_Java实现第八届蓝桥杯图形排版
  17. 9月8日,直播抽奖:涂鸦智能带您掘金千亿美金智能市场
  18. 算法笔记--极大极小搜索及alpha-beta剪枝
  19. 传智播客2014王保明Linux培训系列教程
  20. Linux学习-HaProxy代理后端Nginx

热门文章

  1. hive币涨幅空间大吗_空间大、油耗低,家用MPV领域的三款全能好车,你心动了吗?...
  2. oracle 手动批处理,Oracle 简单备份 批处理(BAT)
  3. 【译】Web Components简介
  4. Github如何删除repository(仓库)
  5. java TreeMap 源代码分析 平衡二叉树
  6. Android 源码编译相关
  7. 实战 Spring Cloud Gateway 之限流篇
  8. 分布式事务+DDD+负载均衡+服务治理已撸!微服务不就这点事?
  9. 58同城 Elasticsearch 应用及平台建设实践
  10. 阿里老员工吐槽:新员工水平差!不服管理!还不加班!我要汇报经理让对方无法转正!...