有一个整数数组,请求出两两之差绝对值最小的值,记住,只要得出最小值即可,不需要求出是哪两个数。 下面是一个结发了,利用了stl 的sort 来晚成排序。
#include
<
iostream
>
#include < vector >
#include < ctime >
#include < cstdio >
#include < cmath >
using namespace std;
#define N 100
#define M 200
int inline dis( int a, int b)
{
return abs(a - b);
}
void print( int & a)
{
cout << " " << a << " " ;
}
int main()
{
int i, min , tmp;
vector < int > vi;
srand(time(NULL));
for ( i = 0 ; i < N ; i ++ )
vi.push_back((tmp = rand() % M,tmp % 2 == 0 ? - tmp : tmp));
sort(vi.begin(),vi.end(),less < int > ());
// for_each(vi.begin(),vi.end(),print);
for (i = 1 ; i < vi.size() ; i ++ ) ...{
tmp = dis(vi[i - 1 ],vi[i]);
if (i == 1 ) ...{min = tmp; continue ;} if ( ! tmp) ...{ min = 0 ; break ;}
if (tmp < min ) min = tmp;
}
cout << endl << " Minimal distance is : " << min << endl;
return 0 ;
}
#include < vector >
#include < ctime >
#include < cstdio >
#include < cmath >
using namespace std;
#define N 100
#define M 200
int inline dis( int a, int b)
{
return abs(a - b);
}
void print( int & a)
{
cout << " " << a << " " ;
}
int main()
{
int i, min , tmp;
vector < int > vi;
srand(time(NULL));
for ( i = 0 ; i < N ; i ++ )
vi.push_back((tmp = rand() % M,tmp % 2 == 0 ? - tmp : tmp));
sort(vi.begin(),vi.end(),less < int > ());
// for_each(vi.begin(),vi.end(),print);
for (i = 1 ; i < vi.size() ; i ++ ) ...{
tmp = dis(vi[i - 1 ],vi[i]);
if (i == 1 ) ...{min = tmp; continue ;} if ( ! tmp) ...{ min = 0 ; break ;}
if (tmp < min ) min = tmp;
}
cout << endl << " Minimal distance is : " << min << endl;
return 0 ;
}
看过有这样的一种解法,找出数组中最大值和最小值,把所有的数map 到这个区间的bit 数组中。 那么两个相邻的bit 为 1 的两个bit 位置的差值最小的就是这个值。如果有相同的数值,那么会map 到一个bit 位上,那么最小的绝对值就是 0 了。