设计一个更优算法查找一n个元素数组中的最大值和最小值
题目如题,已知一种需要比较2n次的方法,要求给出一个更优的算法。特别注意优化时间复杂度的常数!
解题思路:原始的方法在遍历数组的时候,每个数组元素都要和Max与Min比较,共比较2n次;可以通过将数组两两分组,用每个分组的最大值与Max进行比较,最小值与Min进行比较来进行优化,这样一来比较次数减少为3n/2。
代码实现如下:
#include <iostream> #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; }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。