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

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

题目如题,已知一种需要比较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;	
} 

设计一个最优算法查找n个元素数组中的最大值最小值 题目描述 有一个算法查找n个元素的的数组最大值最小值,要比较2n次;请写一个最高效的算法,并说明他要比较的次数。请注意复杂度的常数 (不用写代码,说明步骤过程即可,要定出比较的次数,没写不给分) 解题思路 先遍历数组,两个两个分成组,小的放在左边大的放在右边,这样比较次数是N/2。N是数组的长度。然后最小的元素定是在每组的左边,最大元素在右边。下步在左边的所有元素中比较... 阅读详情

相关推荐

算法导论(第9章-中位数顺序统计学)最大值最小值

算法导论(第9章-中位数顺序统计学)最大值最小值

大田二十 3008

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

数组两两对分组,如果数组元素个数为奇数,就最后单独分一个,然后分别对每组的两个数比较,把小的放在左边,大的放在右边,这样遍历下来,总共比较的次数是 N/2 次; 在前面分组的基础上,那么可以得到结论,最小值定在每组的左边部分找,最大值定在数组的右边部分找,最大值最小值查找分别需要比较N/2 次N/2 次;这样就可以找到最大值最小值了,比较的次数为N/2 * 3 = (3N

shuiziliu1025的博客 1万+

利用分治算法数组最大元素最小元素

【问题描述】利用分治算法一个n运算数组最大元素最小元素 【输入形式】输入两行,第行为一个整数n,第二行为数组的n个元素; 【输出形式】输出两个数一个数组最大元素的值,一个数组最小元素的值,中间用空格隔开 【样例输入】 8 8 3 2 9 7 1 5 4 【样例输出】 9 1 【样例说明】 数组中有8个元素最大值为9,最小值为1

AIGC 2897

寻找数组中的最大值最小值

问题来源:《编程之美》2.10 寻找数组中的最大值最小值 对于一个由N个整数组成的数组,需要比较多少次才能把最大最小的数找出来呢? 1. 遍历两次数组,分别找出最大值最小值。需要进行 2 * N 次比较 2. 将数组中的元素分组,按顺序将数组中相邻的两个数分在同组,用MaxMin来存储最大值最小值,同组比较完之后,较小的数与当前的最小值比较,如该数小于当前最小值,更新M

CaryaLiu的专栏 1万+

数组中n个元素整数的最大值

问题解决:可以找出已知数组元素最大值 #include<stdio.h> int main() { int i = 0; int arr[] = { -11,-2,-3,4,5,6,-7,-8,9,-10 }; int max = arr[0]; //这个地方般不要写int max=0 int sz = sizeof(arr) / sizeof(arr[0]); for (i = 0; i < sz; i++) { if (arr[i] > max)

罗铠威的博客 1514

设计一个最优算法查找n个元素数组中的最大值最小值。已知种需要比较2n次的方法,请给一个更优算法

先遍历数组,两个两个分成组,小的放在左边大的放在右边,这样比较次数是N/2。N是数组的长度。然后最小的元素定是在每组的左边,最大元素在右边。下步在左边的所有元素中比较N/2次产生最小的,在右边的元素中比较N/2次产生最大的。总共需要比较的次数是3*(N/2)次。代码如下 #include #include using namespace std; int main()

Sailor Moon的博客 7072

c++ list判断是否包含_检查数组中的数字是否连续,你还有其他方案?

简述 给定一个未排序的数字数组,编写一个函数,如果该数组包含连续的数字,则该函数返回true。 * a)如果array为{5,2,3,1,4},则该函数应返回true,因为该数组具有从1到5的连续数字。 * b)如果数组是{83,78,80,81,79,82},则该函数应返回true,因为数组具有从78到83的连续数字。 * c)如果数组为{34,23,52,12,3},则该函数应返回false...

weixin_39922769的博客 911

一个数组中的最大值最小值算法改进 php 实现

设计一个最优算法查找n个元素数组中的最大值最小值。已知种需要比较2n次的方法,请给一个更优算法。情特别注意优化时间复杂度的常数。 主要思想:把数组两两对分组,如果数组元素个数为奇数,就最后单独分一个,然后分别对每组的两个数比较,把小的放在左边,大的放在右边,这样遍历下来,总共比较的次数是 N/2 次;在前面分组的基础上,那么可以得到结论,最小值定在每组的左边部分找,最大

u011156212的专栏 3806

算法:无序数组中求最大值最小值

题目:如何在无序数组中求最大值最小值,要求比较的次数尽可能小 这是面经中的道面试题,如果单纯的来看这道题,我们采用暴力法遍历遍,对每一个元素与存储的最大值最小值进行比较,完全就可以解决这个问题,比较次数为2n。 但是在面试中经常会遇到面试官的追问:会用更好的方法解决这道题么?此时我们可以考虑如果比最大元素大,也就不用跟最小的元素进行对比了,这样的比较次数会略小于2n。 显然这种思路也过于...

qq_36687189的博客 4110

php求一个数组中的最大值最小值,求一个数组中的最大值最小值算法改进 php 实现...

设计一个最优算法查找n个元素数组中的最大最小。已知种需要比较2n次的方法,请给一个更优算法。情特别注意优化时间复杂度的常数。 主要思想:把数组两两对分组,如果数组元素个数为奇数,就最后单独分一个,然后分别对每组的两个数比较,把小设计一个最优算法查找n个元素数组中的最大值最小值。已知种需要比较2n次的方法,请给一个更优算法。情特别注意优化时间复杂度的常数。主要思想:把数组两两...

weixin_35618957的博客 431

同时找出数组最大值最小值

虽说第一个方法在时间复杂度的分析上比第一个要少n/2,但是我在电脑上测试的结果,运行时间是差不多的。搞不懂~ //朴素算法:分别找出最大值最小值。2n次比较 #include int A[50000010]; int FIND_MINIMUM_AND_MAXIMUM(int A[],int n) { int min=A[0],max=A[0],i; for(i=1;i<n;i+

yuanjianchuan的专栏 1051

查找数组最大最小值

设计一个最优算法查找一个n个元素数组中的最大值最小值种需要比较2n次的方法,请给出一个更优算法。请特别注意优化时间复杂度的常数。 void fun(int a[], int n) { if (a == NULL) { return; } int max = a[0]; int min = a[0]; int len = (n&1)? n : n-

brucehb的专栏 2986

从蓝桥杯ALGO-49题解析寻找数组最大值算法思维与多语言实现

在计算机科学中,数组遍历是数据处理的基础操作,其核心原理是通过线性扫描逐个访问元素,高效完成信息检索与聚合。这种线性扫描与状态维护的技术范式,是实现数据统计、系统监控实时分析的关键,具有极高的工程实践价值。无论是数据分析中的最大值统计,还是系统监控中的峰值检测,都离不开对最值查找算法的深入理解。本文以蓝桥杯ALGO-49题为切入点,结合**算法思维****多语言实现**,详细拆解了寻找数组最大值及其首次出现位置的标准化流程,并探讨了从基础遍历到高级变体(如同时查找最大最小值、寻找第K大元素)的思维拓展,

weixin_30847865的博客 474

数组最大最小值[阿里2013校招题目]

设计一个最优算法查找n个元素数组中的最大值最小值。已知种需要比较2n次的方法,请给一个更优算法。情特别注意优化时间复杂度的常数。

buptmichael的专栏 588

最大最小值,最少要进行多少次比较? | 经典面试题

如何从n个数里找到最大值?很容易想到,用一个循环就能搞定。int find_max(int arr[n]){ int max = -infinite; for(int i=0...

shenjian58的博客 3200

【面试题-编程】查找数组中差值最大的两个数

题目:书写一个函数,实现查找一个数组中右边减左边的差最大的两个数。右边是指当前数组右边的所有数。 思路:最开始想到的就是循环整个数组,拿右边的所有数字减去当前位置的数,然后记录最大差值的两个数时间复杂度O(N*N) 思路二:最大差值可以通过拿当前的数减去它左边的最小的数中最大的那个值。时间复杂度O(N) 思路二的函数: template void FindMaxDifference2

学习,记录,总结 的专栏 6905

分享些阿里巴巴算法、数据工程师的笔试题以及答案

https://www.toutiao.com/a6670830469333910027/ 阿里巴巴算法、数据工程师笔试题 1、有三个结点的,可以构成多少个种叉树? 2、副牌52张(去掉大小王),从中抽取两张牌,黑的概率是多少? 编程题: 3、设计一个最优算法查找n个元素数组中的最大值最小值。已知种需要比较2n次的方法,请给一个更优算法。情特别注意优化时...

喜欢打酱油的老鸟 4929

有N个数数组,找出这个数中的个数,使得这两个数最接近0

有N个数数组,没有顺序。现在的问题是让你在数组中找出两个数,使得这两个数尽可能的接近0。 想到的的方法是尝试所有数对<xi,xj>的组合,之后找出其中的绝对值最小的数对即可。但是这样做的时间复杂度是O(N^2),有没有更快点的方法呢? 这里给出一个O(NlogN)时间复杂度算法。 有种比较直观的做法。 对数组排好序之后。如果数字全部是正数,那么取最小的两...

andun6063的博客 773
上一篇: 遍历数组一遍求方差
下一篇: 最小三元组距离
coobj2008
博客等级 码龄17年 49粉丝 165原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值