最值查找

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<<' ';

例题:1.成绩分析 - 蓝桥云课 (lanqiao.cn)

题解:

#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转换成大写字母,如果不是小写字母不操作

03-13 09:46