1.可以快排,然后遍历一遍排完序后的数组。时间复杂度为O(NlogN+N)。
2.先遍历一遍数组a[ ],找出最大值max和最小值min。然后以建立一个(max+min-1)大小的数组b[ ],再次遍历原始数组,b[a[i]-min]++,试图建立一种映射关系,降低时间复杂度。代码如下:
#include <iostream>
//#include <bitset>
using namespace std;
int findMinDiff(int a[], int len)
{
int min=INT_MAX, max=INT_MIN;
int i;
for (i = 0; i < len; i++)
{
if (a[i]<min)
{
min=a[i];
}
if (a[i]>max)
{
max=a[i];
}
}
int N = max-min+1;
int* res = new int[N];
memset(res, 0, N*sizeof(int));
for (i = 0; i < len; i++)
{
res[a[i]-min]++;
}
int first, minDiff = INT_MAX;
/*
for (i = 0; i < N; i++)
{
cout<<res[i]<<" ";
}*/
cout<<endl;
bool isflag = true;
for (i = 0; i < N; i++)
{
if (res[i] >= 2)
{
return 0;