蓝桥杯备赛------chapter 4 C++的最值查找
1、min 和 max 函数
功能说明
min(a, b):返回 a 和 b 中的较小值max(a, b):返回 a 和 b 中的较大值
参数形式
支持两种输入方式:
- 直接比较两个值(如
min(3, 5)或max(7, 5)) - 处理列表数据(如
min([1, 2, 3, 4])或max([1, 2, 3, 4]))
返回值
返回输入数据中的最小/最大值。
示例:
min(3, 5)→ 3max(7, 5)→ 7min([1, 2, 3, 4])→ 1max([1, 2, 3, 4])→ 4
时间复杂度
- 比较两个值:O(1)
- 处理列表:O(n)(n为列表长度)


#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,sum=0;
cin >> n;
vector<int> a;
for(int i=0;i<n;i++){
int t;
cin >>t;
a.push_back(t);
}
sort(a.begin() ,a.end());
cout << a[a.size() -1] << endl;
cout << a[0] << endl;
for(int i=0;i<n;i++){
sum += a[i];
}
cout << fixed << setprecision(2)<< 1.0*sum/n;
return 0;
}
C++ STL中的两个函数:min_element和max_element,它们分别用于查找范围内的最小值和最大值。以下是主要知识点总结:
-
函数定义:
-
min_element(st, ed):返回范围[st, ed)中最小值的地址(即迭代器)。 -
max_element(st, ed):返回范围[st, ed)中最大值的地址(即迭代器)。
-
-
参数:
-
两个地址或迭代器
st和ed,定义了查找范围。
-
-
返回值:
-
返回一个迭代器,指向范围内的最小值或最大值。
-
-
解引用操作符:
-
若要获取具体的值,需对返回的迭代器进行解引用操作(如
*)。
-
-
时间复杂度:
-
时间复杂度为O(n),其中n为数组或范围的大小。
-
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v = {5, 1, 3, 9, 11};
std::cout << *std::max_element(v.begin(), v.end()) << '\n'; // 输出11
return 0;
}
`nth_element`函数是C++ STL中的一个部分排序算法,其主要功能是将数组中第k个位置的元素放到它在完全排序时应有的位置,并且保证k之前的所有元素都小于等于该元素,k之后的所有元素都大于等于该元素。它的工作原理类似于快速排序中的分区操作,但只处理包含k的子区间,从而实现线性时间复杂度O(n)。
vector<int> v = {5, 1, 7, 3, 10, 18, 9};
nth_element(v.begin(), v.begin() + 3, v.end());
具体实现步骤如下:
1. 选择一个基点(pivot),通常采用中位数法以优化性能。
2. 将数组分为三部分:小于基点、等于基点和大于基点的元素。
3. 判断k的位置,如果k在小于基点的区间,则递归处理该区间;如果k在大于基点的区间,则递归处理该区间;如果k在等于基点的区间,则分区完成。
4. 递归终止条件是当k落在等于基点的区间时,此时第k个元素已位于正确位置。
例如,对于数组{5, 1, 7, 3, 10, 18, 9},执行`nth_element`函数,指定k为3(索引从0开始),函数会将数组调整为{3, 1, 5, 7, 10, 18, 9},此时索引3的元素7即为第4个元素在完全排序后的正确位置。在这种情况下,7前面的都是比7要小的,后面的都是比7大的。但是前面和后面的都是乱序的
更多推荐


所有评论(0)