固定序列找相差最小的一组(2014华为应届毕业生上机笔试试题)

题目描述:

输入一组身高在170到190之间(5个身高),比较身高差,选出身高差最小的两个身高;若身高差相同,选平均身高高的那两个身高;从小到大输出;
如 输入   170 181 173 186 190  
输出   170 173

//分析:因为这道题要我们求身高差。但是给我们的身高序列是无序的所以有两条思路
//1.我们对每一个身高分别求身高差,要求的次数为n+n-1.....1=O(n^2),然后找出身高差最小的比较次数n,可能有多对,所以又要比较m次
//2.对现有身高排序然后算出身高差最小且平均身高更高的,如果用快速排序时间复杂度为nlog2n+查找次数n就可以得到
#include <algorithm>
#include <iostream>
using namespace std;
void SearchHigh(int highList[],int size)
{
	if(size < 2)
		return ;
	sort(highList,highList+5);
	int temp = highList[0];
	int j = 0;
	int disparity = highList[1]-highList[0];
	for(int i = 1;i < size-1;++i)
	{
		if(disparity >= highList[i+1] - highList[i])
		{
			disparity = highList[i+1] - highList[i];
			j = i;
		}
	}
	cout<<highList[j]<<" "<<highList[j+1];
}
int main(int argc, char* argv[])
{
	int a[] = {170,181,173,185,186,190,193};
	SearchHigh(a,sizeof(a)/sizeof(int));
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值