最值方向
1.min和max函数
min(a,b)返回a和b中较小的那个值,只能传入两个值,或传入一个列表。
例如:
min(3, 5) = 3
min({1, 2, 3, 4})= 1
#include <bits/stdc++.h>
using namespace std;
int main() {
printf("%d\n", min(3, 5)); // 3
printf("%d\n", min({1, 2, 3, 4}));// 1
return 0;
}
max(a,b)返回a和b中较大的那个值,只能传入两个值,或传入一个列表。
例如:
max(3, 5) = 5
max({1, 2, 3, 4}) = 4
#include <bits/stdc++.h>
using namespace std;
int main() {
printf("%d\n", max(3, 5)); // 5
printf("%d\n", max({1, 2, 3, 4})); // 4
return 0;
}
时间复杂度为O(1),传入参数为数组时时间复杂度为O(n),n为数组大小。min,max函数是在取最值操作时最常用的操作。
2. min_element和max_element
std::min_element(begin, end)
函数返回指向范围[begin, end)
中最小元素的迭代器。std::max_element(begin, end)
函数返回指向范围[begin, end)
中最大元素的迭代器。
时间复杂度均为O(n), n为数组大小(由传入的参数决定)
#include <bits/stdc++.h>
using namespace std;
int main() {
//初始化v
vector<int> v = {5, 1, 3, 9, 11};
//输出最大的元素,*表示解引用,即通过地址(迭代器)得到值
cout << *max_element(v.begin(), v.end()) << endl; // 11
cout << *min_element(v.begin(), v.end()) << endl; // 1
return 0;
}
3.nth_element函数
nth_element(st,k, ed)
进行部分排序,返回值为void()
传入参数为三个地址或迭代器。其中第二个参数位置的元素将处于正确位置,其他位置元素的顺序可能是任意的,但前面的都比它小,后面的都比它大。
时间复杂度O(n)
#include <bits/stdc++.h>
using namespace std;
int main() {
//初始化v
vector<int> v = {5, 1, 7, 3, 10, 18, 9};
//输出最大的元素,*表示解引用,即通过地址(迭代器)得到值
nth_element(v.begin(), v.begin(), v.end());
//这里v[3]的位置将会位于排序后的位置,其他的任意
for(auto &i : v) cout << i << " ";
// 1 3 7 5 10 18 9
return 0;
}