博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数组中重复的数字
阅读量:4519 次
发布时间:2019-06-08

本文共 959 字,大约阅读时间需要 3 分钟。

题目

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

例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。

思路

1、排序

将数组排序,然后扫描排序后的数组即可。

时间复杂度:O(nlogn),空间复杂度:O(1)

2、哈希表

从头到尾扫描数组,每扫描到一个数字,判断该数字是否在哈希表中,如果该哈希表还没有这个数字,那么加入哈希表,如果已经存在,则返回该数字;

时间复杂度:O(n),空间复杂度:O(n)

3、交换

0~n-1正常的排序应该是A[i]=i;因此可以通过交换的方式,将它们都各自放回属于自己的位置;

从头到尾扫描数组A,当扫描到下标为i的数字m时,首先比较这个数字m是不是等于i,

如果是,则继续扫描下一个数字;

如果不是,则判断它和A[m]是否相等,如果是,则找到了第一个重复的数字(在下标为i和m的位置都出现了m);如果不是,则把A[i]和A[m]交换,即把m放回属于它的位置;

重复上述过程,直至找到一个重复的数字;

时间复杂度:O(n),空间复杂度:O(1)

(将每个数字放到属于自己的位置最多交换两次)

#include 
#include
using namespace std;void dup(vector
&v){ if(v.empty()) { cout<<" 数组为空."<
>n; vector
v; for(int i=0;i
>t; v.push_back(t); } dup(v); for(auto i:v) cout<
<<" "; cout<

 

转载于:https://www.cnblogs.com/tianzeng/p/10072344.html

你可能感兴趣的文章
canvas刮奖
查看>>
qt下拖放(一)
查看>>
Linux后台运行python程序并输出到日志文件
查看>>
HTML的语义化和一些简单优化
查看>>
jQuery基础教程
查看>>
Spring 在xml文件中配置Bean
查看>>
poj1611(简答并查集)
查看>>
基于scap的服务器安全基线核查设计与实现
查看>>
NFS 安装与配置
查看>>
javascript 模拟滚动 隐藏滚动条
查看>>
深度探索C++对象模型读书笔记(2)
查看>>
Linux下不停止服务,清空nohup.out文件
查看>>
C++11 Intro - Thread Id
查看>>
帝国CMS操作类型一览表
查看>>
spring boot开发环境搭建
查看>>
手把手教你使用 Clion 开发 Linux C++ 项目
查看>>
unix环境高级编程基础知识之第一篇
查看>>
TTylinux 最小的系统(带GCC)
查看>>
Linux mysqladmin 命令
查看>>
codeforces 14D
查看>>