最值查找
min和max函数
min(a,b)
max(a,b)
min({a,b,c,d})
max({a,b,c,d})
时间复杂度为O(n)
min_element与max_element
min_element(st,ed):返回地址[st,ed)中最小的那个值的地址(迭代器),传入参数为两个地址或迭代器
max_element(st,ed):返回地址[st,ed)中最大的那个值的地址(迭代器),传入参数为两个地址或迭代器
例:
vector<int> v= {24,9,1,5};
cout<<*min_element(v.begin(),v.end())<<endl;
nth_element
进行部分排序,返回值为void
传入参数为三个地址或者迭代器,第二个参数位置的元素将处于正确位置,其他元素随意,但左小右大。
例:
vector<int> v ={5,8,2,89,1,90,29};
nth_element(v.begin(),v.begin()+3,v.end());
for(auto &i :v)cout<<i<<' ';
题解:
#include <bits/stdc++.h>
using namespace std;
const int N=1e4+9;
int a[N];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;++i)
{
cin>>a[i];
}
int max=*max_element(a+1,a+1+n);
int min=*min_element(a+1,a+1+n);
cout<<max<<endl;
cout<<min<<endl;
long long sum=0;
for(int j=1;j<=n;j++){
sum+=a[j];
}
cout<< fixed <<setprecision(2)<<1.0*sum/n<<endl;
return 0;
}
二分查找
二分查找的前提
只能对单调递增获单调递减的数组进行操作
binary_search函数
通过二分查找算法来确定是否存在目标元素,返回值为bool
#include<bits/stdc++.h>
using namespace std;
int main()
{
vector<int>v={2,6,1,8,10};
int target = 5;
bool found = binary_search(v.begin(),v.end(),target);
if(found)
{
cout<<“存在”<<target;
}
else{
cout<<"不存在"<<target;
}
return 0;
}
lower_bound和upper_bound
前提:数组必须为非降序,如果在非升序的数组中使用,可以通过修改比较函数实现(和sort类似)
lower_bound(st,ed,x):返回地址[st,ed)中第一个大于等于x的元素的地址
upper_bound(st,ed,x):返回地址[st,ed)中第一个大于x的元素的地址
#include<bits/stdc++.h>
using namespace std;
int main(){
ios:sync_with_stdio(0),cin.tie(0),cout.tie(0);
vector<int>v={5,8,1,5,13,89};
sort(v.begin(),v.end());
for(auto &i:v)
cout<<i<<' ';
cout<<endl;
//找到数组中第一个大于等于8的元素的位置
cout<<(lower_bound(v.begin(),v.end(),8)-v.begin())<<'\n';
return 0;
}
例题:1.二分查找数组元素 - 蓝桥云课 (lanqiao.cn)
题解:
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int target=0;
cin>>target;
int data[200];
for(int i = 0 ; i < 200 ; i++)
{
data[i] = 4 * i + 6;
}
cout<<(lower_bound(data,data+200,target)-data)<<'\n';
return 0;
}
大小写转换
islower/issupper函数
#include<cctype>
用于检查一个char字符是否为小写或者是大写字母,函数的返回值为bool类型。
tolower/toupper函数
tolower(A)->a
tolower(char ch)可以将ch转换成小写字母,如果不是大写字母不操作
toupper(char ch)可以将ch转换成大写字母,如果不是小写字母不操作