设计一个更优算法查找一n个元素数组中的最大值和最小值

题目如题,已知一种需要比较2n次的方法,要求给出一个更优的算法。特别注意优化时间复杂度的常数!

解题思路:原始的方法在遍历数组的时候,每个数组元素都要和Max与Min比较,共比较2n次;可以通过将数组两两分组,用每个分组的最大值与Max进行比较,最小值与Min进行比较来进行优化,这样一来比较次数减少为3n/2。

代码实现如下:

#include 
#include "limits.h"

using namespace std;

int main() {
	int d[] = {9, 6, 7, 5, 13, 6, 2};
	int n = 8;
	int max = INT_MIN;
	int min = INT_MAX;
	bool flag = false;
	if(n % 2) {
		n--;
		flag = true;		
	}
		
	for(int i = 0; i < n-1; i+=2) {
		if(d[i] <= d[i+1]) {
			if(d[i] < min)
				min = d[i];
			if(d[i+1] > max)
				max = d[i+1];
		}
		else {
			if(d[i] > max)
				max = d[i];
			if(d[i+1] < min)
				min = d[i+1];
		}	
	}
	//若数组长度为奇数,还需要和最后一个数作比较 
	if(flag) {
		if(d[n] < min)
			min = d[n];
		if(d[n] > max)
			max = d[n];	
	}
	cout << "The max value of the array is: " << max << endl;
	cout << "The min value of the array is: " << min << endl;	
} 

你可能感兴趣的:(笔试题)