给定一个长度为 nn 的整数数组 nums,数组中所有的数字都在 0∼n−10∼n−1 的范围内。

数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。

请找出数组中任意一个重复的数字。

注意:如果某些数字不在 0∼n−10∼n−1 的范围内,或数组中不包含重复数字,则返回 -1;

样例

给定 nums = [2, 3, 5, 4, 3, 2, 6, 7]。返回 2 或 3。

思路一:两重枚举

代码:

class Solution {
public:int duplicateInArray(vector<int>& nums) {int n=nums.size();for(int i=0;i<n;i++)if(nums[i]<0||nums[i]>n-1)return -1;for(int i=0;i<n;i++)for(int j=i+1;j<n;j++)if(nums[i]==nums[j]){ return nums[i];break;}return -1;}
};

思路二:

首先遍历一遍数组,如果存在某个数不在0到n-1的范围内,则返回-1。
下面的算法的主要思想是把每个数放到对应的位置上,即让 nums[i] = i。
从前往后遍历数组中的所有数,假设当前遍历到的数是 nums[i]=x,那么:

如果x != i && nums[x] = x,则说明 x 出现了多次,直接返回 x 即可;
如果nums[x] != x,那我们就把 xx 交换到正确的位置上,即 swap(nums[x], nums[i]),交换完之后如果nums[i] != i,则重复进行该操作。由于每次交换都会将一个数放在正确的位置上,所以swap操作最多会进行 nn 次,不会发生死循环。

循环结束后,如果没有找到任何重复的数,则返回-1。

代码:

class Solution {
public:int duplicateInArray(vector<int>& nums) {int n=nums.size();for(int i=0;i<n;i++)if(nums[i]<0||nums[i]>n-1)return -1;for(int i=0;i<n;i++){while(nums[i]!=i&&nums[nums[i]]!=nums[i])swap(nums[nums[i]],nums[i]);if(nums[i]!=i)return nums[i];}return -1;}
};

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 如何快速清空 Linux 中的大文件
  2. 弹出popwindow 背景变暗
  3. 要让OKR真正”OK“,这三点一定要注意!
  4. linux php ftp扩展,Linux中如何安装 PHP 扩展?(方法介绍)
  5. nginx的list数据结构
  6. WPF入门教程系列三——Application介绍(续)
  7. Python实现-中介者模式
  8. 常用的python测试脚本_详解Python的单元测试
  9. SpringBoot+AOP构建多数据源的切换实践
  10. 零基础学习前端:学习路线、学习计划、实战项目和面试题简历分享。
  11. Java关于md5+salt盐加密验证
  12. 【HenCoder Plus】第四期终于来了
  13. 控制数学问题的MATLAB求解,控制数学问题的MATLAB求解.pdf
  14. 计算机硬盘被配置成动态磁盘,动态硬盘
  15. 点集求最小包围盒OBB算法
  16. 中班音乐计算机创编,幼儿园中班音乐教学方案创意实用篇
  17. PJzhang:今天才搞清身份证、银行卡……的编码规则
  18. 计算机考研数学和英语难吗,英语难还是数学难
  19. 【VUE】微商城(七)----实现分类页面功能
  20. loop和goto用法

热门文章

  1. 示波器的校准及李萨如图形
  2. 全球十大最受欢迎的猫咪品种排行榜公布,布偶猫连续三年排名第一
  3. 关于 reCAPTCHA 验证码
  4. Obsidian_日程管理工具
  5. 如何解决macbook开机的时候自启动很多程序的问题
  6. yum 与rpm 问题yum本地源的配置
  7. 电系魔法师成长之路—仪器仪表学习(二)设计T型和Π型衰减器
  8. C#中base关键字的详解
  9. C#图像点阵处理性能问题
  10. filebrowser文件管理系统详细使用说明