常用STL函数

一、nth_element

用法:nth_element(first, nth, last, compare)

头文件:<algorithm>

复杂度:O(n)

作用:可以求array[first,last)区间上从小到大排序后第nth个位置的元素,不保证区间上其他的元素有序,只保证第nth个元素的正确性。即可以求区间第k大

实现的方法:以快排的思想,每次选择一个数为轴,小的放该数左边,大的放该数右边,若统计出该数在第nth个数的左边,则递归进入该数右半部分重复操作此过程,否则进入左半部分。期望时间复杂度为n+\frac{n}{2}+\frac{n}{4}+ \dots +1\approx 2n

举例:如要求出第k大的数,因为默认顺序为从小到大,那就v.size()-k,即为第k大的数(注:第1大的数为最大的数)

vector<int>v;
nth_element(v.begin(),v.begin()+v.size()-k,v.end());
int ans=v[v.size()-k];

二、next_permutation

用法:next_permutation(arrL, arrR)

头文件:<algorithm>

复杂度:O(n!)

作用:以字典序生成数列或字母的全排列

int a[5]={1,2,3,4,5};
char s[5]={'a','b','c','d','e'};
do
{
    DO SOMETHING...
}while(next_permutation(a,a+5));

三、位运算函数

Tip:

1、若是long long类型,一定要在后面加上ll,如__builtin_popcountll这样!!!

2、signed类型使用下列函数统计将包含符号位!!!

  • __builtin_popcount(unsigned int n)
    判断n的二进制中有多少个1
  • __builtin_parity(unsigned int n)
    判断n的二进制中1的个数的奇偶性,0为偶,1为奇
  • __builtin_ffs(unsigned int n)
    判断n的二进制末尾最后一个1的位置,从1开始标号
  • __builtin_ctz(unsigned int n)
    判断n的二进制末尾0的个数
  • __builtin_clz(unsigned int n)
    判断n的二进制前导0的个数,0为未定义不可用,若用signed int要特别注意符号位
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值