找出整数数组中两个数差值的绝对值最小

来源:互联网 发布:斗鱼 网络视听许可证 编辑:程序博客网 时间:2024/06/10 13:33

       有一个整数数组,请求出两两之差绝对值最小的值,记住,只要得出最小值即可,不需要求出是哪两个数。 下面是一个结发了,利用了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;
}

       看过有这样的一种解法,找出数组中最大值和最小值,把所有的数map 到这个区间的bit 数组中。 那么两个相邻的bit 为 1 的两个bit 位置的差值最小的就是这个值。如果有相同的数值,那么会map 到一个bit 位上,那么最小的绝对值就是 0 了。

原创粉丝点击