题目:
在一个长度为n的数组里的所有数字都在0~n-1的范围内,数组中某些数字是重复的,但不知道那几个数字重复了,找出这些数字.
我的解法:
用一个map保存,发现map[i]值超过2即输出
代码如下:
#include <iostream>
using namespace std;
#include<map>
#include<string.h>
int* chongfu(int *arr, int n)
{
if (arr == NULL || n < 2)
return NULL;
map <int,int> m;//创建一个map
int i = 0;
for (int i = 0; i < n; i++)//初始化Map
m[i] = 0;//初始化全为0
int *num = new int[n];
memset(num, 0, 4*n);//memset只能初始化0和-1,初始化的size为字节大小
/*for (int i = 0; i < n; i++)
num[i] = 0;*/
int j = 0;
while (i< n)
{
m[arr[i]] += 1;
if (m[arr[i]] >= 2)
{
num[j++] = arr[i];
}
i++;
}
return num;
}
int main()
{
int arr[] = { 2,3,1,0,2,5,3 };
int *result = new int[7];
result = chongfu(arr, 7);
for (int i = 0; i < 7; i++)
{
if (result[i] != 0)
cout << result[i];
}
//cout << result[i];
return 0;
}
重点注意:
(1)map清0的方法–>明天改进一下
(2)memset的用法:memeset(int *dst,int key,size_t size)
其中,key只能为0和-1,size为字节的大小
(3)输出结果的时候要判断是否为0,为0不输出-0->明天改进
不写了,该回宿舍了