一个数组arr,长度为N,N小于10^8,里面数字的范围是1~N,是否有重复,并统计出来
来源:互联网 发布:网络应急演练原则 编辑:程序博客网 时间:2024/05/29 15:12
一个数组arr,长度为N,N小于10^8,里面数字的范围是1~N,是否有重复。时间复杂度O(N),空间复杂度O(1)
也可以处理:题2:一个长度为N的整形数组,数组中每个元素的取值范围是[0,N-1],写一个算法判断数组中是否存在重复的数字
思路:会更改原数组,利用原数组的下标。把每个数放在自己下标相应的地方,如果该下标对应的地方的值等于下标就不用交换。
#include <iostream>#include <cassert>#include <algorithm>#include <cstdlib>using namespace std;void count_num(int *array,int n);int main(){int array[10]={4,3,2,3,4,5,2,8,6,2};count_num(array,10); for (int i = 0 ;i < 10;i++){cout<<array[i]<<" ";}cout<<endl;return 0;}void count_num(int *array,int n)//会修改原数组{assert(array);for (int i = 0;i < n;i++)//转化 -- 利用这个可以判断重复的数字{while (array[i] != i){if (array[array[i]] != array[i] ){swap(array[i],array[array[i]]);}else{break;}}}for (int i = 0 ;i < 10;i++)//相同的置为-1{if (array[i] == i)//array[i] != i 则表示有重复!!即上面提到的第二题{array[i] = -1;}}for(int k = 0; k < n;k++)//统计并置位{if (array[k] >= 0){array[array[k]]--;array[k] = 0;}}for (int j = 0 ;j < n;j++)//转成正数{if (array[j] == 0){continue;}array[j] = abs(array[j]);}}
0 0
- 一个数组arr,长度为N,N小于10^8,里面数字的范围是1~N,是否有重复,并统计出来
- 一个数组arr,长度为N,N小于10^8,里面数字的范围是1~N,求每个数字出现的次数
- 一个长度为N的整形数组,数组中每个元素的取值范围是[0,N-1],写一个算法判断数组中是否存在重复的数字
- 在一个长度为n的数组里的所有数字都在1到n-1的范围内。 有一个数字重复若干次,找出这个数字。
- 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{
- 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{
- 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。
- 一个大小为n的数组,里面的数都属于范围[0, n-1],有不确定的重复元素,找到至少一个重复元素,要求O(1)空间和O(n)时间。
- 谷歌面试题--一个大小为n的数组,里面的数都属于范围[0, n-1],有不确定的重复元素,找到至少一个重复元素,要求O(1)空间和O(n)时间
- [每日练习]数组有N+M个数字, 数字的范围为1 ... N, 打印重复的元素, 要求O(M + N), 不可以用额外的空间
- 一个大小为N的数组,里面是N个整数,怎样去除重复的数
- 一个大小为N的数组,里面是N个整数,怎样去除重复
- 判断一个数组(有n个数据,数组的值大于等于1小于等于N)里面是否有两个一样的数据
- 长度为n的数组,有一个数m重复出现了n/2+1次,找出这个数
- 一个长度为2N的数组,前面N个是数字,后面N个是字母,类似123abc,让转化为1a2b3c
- [经典面试题][谷歌]一个大小为n的数组,里面的数都属于范围[0, n-1],有不确定的重复元素,找到至少一个重复元素
- C++ - 一个非递减数组,下标从0到n,元素的取值范围为从0到n的整数,判断其中是否有重复元素
- 长度为n的数组求其中有几个长度为k的区间数字是连续的(无重复)
- javaweb中使用百度、谷歌地图进行定位
- lighttpd 配置文件
- 全备+若干个日志备份批量还原
- GetLastError返回值查询(2)
- ckermit还是gkermit?
- 一个数组arr,长度为N,N小于10^8,里面数字的范围是1~N,是否有重复,并统计出来
- 连接数据库,读取数据库中的一列值,并赋值到dropdownlist中
- poj 2184 0---1背包的变形
- css小技巧
- [leetcode]:Two Sum
- 桌面电脑操作系统开发笔记(1)——MBR和VBR
- 收集一些jQueryMobile的插件和案例
- Linux Epoll介绍和程序实例
- 微信时代如何才能够利用好时间?