找元组中差值最大最小个数

题目:有n个数,两两组成二元组,相差最小的有多少对呢?相差最大呢?

例如 ar[] = {1,3,4,9},返回 1   1

br[] = {1,2,3,10,12,21},返回 2  1

我的思路是将元素两两做差,将差值保存在一个数组内,把数组进行排序,即可找出最小差值多少个,最大差值多少个。(看起来我的时间空间复杂度低不了)

#include
#include
#include
using namespace std;
void func(int n, int ar[], int br[])
{
	int size = (n*n-n)/2;
	vector vec;
	for(int i=0; iar[j])
				vec.push_back(ar[i]-ar[j]);
			else
				vec.push_back(ar[j]-ar[i]);
		}
	}
	sort(vec.begin(), vec.end());
	for(auto i=vec.begin(); i!=vec.end(); ++i)
		cout<<*i<<" ";
	cout<

 运行结果

 

 因该还有更好地思路来节省空间时间

于是我换了一种思路,在每次拿到差值的时候就比较它是不是最大或最小值,是就计数,不是就跳过得到下面的算法

#include
#include
#include
using namespace std;
void func(int n, int ar[], int br[])
{
	int min = -1, max = -1, maxc = 0, minc = 0, tmp = 0;
	for(int i=0; i0 ? ar[0]-ar[1] : ar[1]-ar[0]);
		for(int j=i+1; jmax){max=tmp;maxc=1;continue;}
			else if(tmp==max){++maxc;continue;}
			else continue;	
		}
	}
	br[0]=minc;
	br[1]=maxc;
}

int main()
{
	int ar[] = {1,2,3,4,5,6,7,8,9,0,234, -132, 354325, 52354, 123}, br[2]={0};
	func(sizeof(ar)/sizeof(ar[0]), ar, br);
	cout<

 执行结果

 

看起来节省了空间

 

你可能感兴趣的:(找元组中差值最大最小个数)