找出数组中重复的数字
给定一个长度为 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;}
};
找出数组中重复的数字相关推荐
- 找出数组中重复的数字---多思路
问题:找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意 ...
- 剑指offer 面试题三 找出数组中重复的数字
1 import org.junit.Test; 2 3 import java.util.Arrays; 4 import java.util.HashSet; 5 6 public class D ...
- 13. 找出数组中重复的数字【难度: 简单 / 知识点: 模拟】
13. 找出数组中重复的数字[难度: 简单 / 知识点: 模拟] 方法一: map 计数 时间复杂度O(nlongn) 空间复杂度多了一个二叉树 class Solution {public:int ...
- java如何找重复数字_Java如何找出数组中重复的数字
题目描述:找出数组中重复的数字,具体内容如下 在一个长度为n的数组里的所有数字都在 0~n-1的范围内.数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复了几次.请找出数组中任意 ...
- 图解面试题:找出数组中重复的数字?
今天分享的题目来源于 LeetCode 上的剑指 Offer 系列 面试题03. 数组中重复的数字. 题目链接:https://leetcode-cn.com/problems/shu-zu-zhon ...
- 01、找出数组中重复的数字
1.找出数组中重复的数字 题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. ...
- 剑指offer 有人相爱,有人夜里开车看海,有人leetcode第一题都做不出来(leetcode有空就刷系列之找出数组中重复的数字)
数组中重复的数字 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找 ...
- JS实现找出数组中重复的数字的三种方法
分享在JS中实现--找出数组中重复数字的方法的三种 法一. 排序比较法 先排序,再通过遍历比较,若相等,则添加到结果数组中,最后对结果数组进行去重,即可得到结果. function getSameNu ...
- AcWing之找出数组中重复的数字
题目 给定一个长度为 n 的整数数组 nums,数组中所有的数字都在 0∼n−1 的范围内. 数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次. 请找出数组中任意一个重复的 ...
最新文章
- 如何快速清空 Linux 中的大文件
- 弹出popwindow 背景变暗
- 要让OKR真正”OK“,这三点一定要注意!
- linux php ftp扩展,Linux中如何安装 PHP 扩展?(方法介绍)
- nginx的list数据结构
- WPF入门教程系列三——Application介绍(续)
- Python实现-中介者模式
- 常用的python测试脚本_详解Python的单元测试
- SpringBoot+AOP构建多数据源的切换实践
- 零基础学习前端:学习路线、学习计划、实战项目和面试题简历分享。
- Java关于md5+salt盐加密验证
- 【HenCoder Plus】第四期终于来了
- 控制数学问题的MATLAB求解,控制数学问题的MATLAB求解.pdf
- 计算机硬盘被配置成动态磁盘,动态硬盘
- 点集求最小包围盒OBB算法
- 中班音乐计算机创编,幼儿园中班音乐教学方案创意实用篇
- PJzhang:今天才搞清身份证、银行卡……的编码规则
- 计算机考研数学和英语难吗,英语难还是数学难
- 【VUE】微商城(七)----实现分类页面功能
- loop和goto用法