1、min 和 max 函数

功能说明

  • min(a, b):返回 a 和 b 中的较小值
  • max(a, b):返回 a 和 b 中的较大值

参数形式
支持两种输入方式:

  1. 直接比较两个值(如 min(3, 5)max(7, 5)
  2. 处理列表数据(如 min([1, 2, 3, 4])max([1, 2, 3, 4])

返回值
返回输入数据中的最小/最大值。
示例:

  • min(3, 5) → 3
  • max(7, 5) → 7
  • min([1, 2, 3, 4]) → 1
  • max([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_elementmax_element,它们分别用于查找范围内的最小值和最大值。以下是主要知识点总结:

  1. 函数定义

    • min_element(st, ed):返回范围[st, ed)中最小值的地址(即迭代器)。

    • max_element(st, ed):返回范围[st, ed)中最大值的地址(即迭代器)。

  2. 参数

    • 两个地址或迭代器sted,定义了查找范围。

  3. 返回值

    • 返回一个迭代器,指向范围内的最小值或最大值。

  4. 解引用操作符

    • 若要获取具体的值,需对返回的迭代器进行解引用操作(如*)。

  5. 时间复杂度

    • 时间复杂度为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大的。但是前面和后面的都是乱序的

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐