STL---二分查找、去重、全排列
二分查找函数
二分查找适用于有序序列。
lower_bound()函数
返回第一次出现大于等于那个要查找的数的地址
upper_bound()函数
返回的是第一个比要查找的数大的数的地址 (注意 这里是大于 不包括等于)
//返回一个迭代器,表示第一个大于等于val的元素,如果不存在这样的元素,则返回end。
lower_bound(beg, end, val);lower_bound(beg, end, val, comp);//自定义重载运算符//返回一个迭代器,表示第一个大于val的元素,如果不存在这样的元素,则返回end。
upper_bound(beg, end, val);upper_bound(beg, end, val, comp);//自定义重载运算符
注意 返回的是一个迭代器 也就是指针 所以 我们一般这样写
去重函数
unique()
unique()是C++标准库函数里面的函数,其功能是去除相邻的重复元素(只保留一个),所以使用前需要对数组进行排序
原理
它并没有将重复的元素删除,而是把重复的元素放到数组的最后面藏起来了 返回给你一个指向不重复序列的最后一个数字的迭代器,所以要用返回的迭代器减去a的首地址 就得到了 去重后的数组长度
使用方法:对于长度为n数组a,unique(a,a+n) - a 返回的是去重后的数组长度
全排列的函数
next_permutation(start,end),和prev_permutation(start,end)。
这两个函数作用是一样的,区别就在于前者求的是当前排列的下一个排列,后一个求的是当前排列的上一个排列。至于这里的“前一个”和“后一个”,我们可以把它理解为序列的字典序的前后,严格来讲,就是对于当前序列pn,他的下一个序列pn+1满足:不存在另外的序列pm,使pn<pm<pn+1.
对于next_permutation函数,其函数原型为:
#include <algorithm>
bool next_permutation(iterator start,iterator end)
当当前序列不存在下一个排列时,函数返回false,否则返回true
看具体用法:
例题 51nod1384http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1384
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
int main(){char ch[50];scanf("%s",ch);int l=strlen(ch);sort(ch,ch+strlen(ch));do{puts(ch);}while(next_permutation(ch,ch+l));return 0;
}
STL---二分查找、去重、全排列相关推荐
- STL 二分查找 upper_bound和lower_bound用法
STL中关于二分查找的函数有三个lower_bound .upper_bound .binary_search . 这三个函数都运用于有序区间(当然这也是运用二分查找的前提),下面记录一下这两个函数. ...
- 关于二分查找及其上下界问题的一些思考
个人认为在编程的时候,我的代码能力应该是到位的,但是昨天参加的某公司笔试彻底把这个想法给终结了,才意识到自己是多么的弱.其中印象最深刻的是一道关于二分查找上下界的问题.当时洋洋得意,STL 分分钟搞定 ...
- 数据结构(一)STL二分法查找实现及上下界
一.二分查找思想 在有序表中查找元素常常使用二分查找(Binary Search),有时也译为折半查找,它的基本思想就像是"猜数字游戏":你在心里想一个不超过1000的正整数,我可 ...
- 1.9 编程基础之二分查找 13:整数去重 python
http://noi.openjudge.cn/ch0109/13/ """1.9 编程基础之二分查找 13:整数去重 http://noi.openjudge.cn/c ...
- C++ 语言基础 —— STL —— 算法 —— 二分查找算法
STL 中,在 <algorithm> 头文件里提供了两个利用二分查找的方法在一个排好序的数组中进行查找. 在一个从小到大的排好序的数组中: lower_bound(begin,end,n ...
- 用stl函数来实现二分查找
算法日记(一)_m0_61723200的博客-CSDN博客 之前在这篇文章用的是自定义函数的方法进行二分查找的,今天我会用stl函数进行二分查找. binary_search:查找某个元素是否出现,返 ...
- 【C++】C++11 STL算法(四):二分查找法(Binary search operations)、合并操作
目录 一.lower_bound 1.原型: 2.说明: 3.官方demo 二.upper_bound 1.原型: 2.说明: 3.官方demo 三.binary_search 1.原型: 2.说明: ...
- 51 nod 1624 取余最长路 思路:前缀和 + STL(set)二分查找
题目: 写这题花了我一上午时间. 下面是本人(zhangjiuding)的思考过程: 首先想到的是三行,每一行一定要走到. 大概是这样一张图 每一行长度最少为1.即第一行(i -1) >= 1, ...
- STL之lower_bound,upper_bound二分查找函数 结构体
codeforces上的代码是开放的,常常就能看到本渣与大神们的差距 比如二分查找... 1.在数组中,找出第一个4所在位置 输入: 14 4 1 2 2 3 4 4 4 4 5 6 7 9 9 10 ...
- 离散化+unique()+二分查找
离散化 引自百度百科 离散化,把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率. 通俗的说,离散化是在不改变数据相对大小的条件下,对数据进行相应的缩小.例如: 原数据:1,999,1 ...
最新文章
- 剑指offer_第9题_变态跳台阶
- POJ2299 Ultra-QuickSort
- 加载网络图片的框架总结
- hdu1556(Color the ball )
- 远程修改linux文件内容,用VS Code连接远程Linux服务器实时修改代码
- vim、gvim在windows下中文乱码的终极解决方案
- qtitanribbon注册_点云平台之QtitanRibbon
- 重启中的武汉:烟火气息回来了,消费疯狂增长
- linux 建立伪目标过程,linux之Makefile 编写、规则、伪目标、变量
- mysql8.0.17压缩包安装教程_mysql 8.0.17 解压版安装配置方法图文教程
- linux c程序hello,Linux下实现c语言hello world 步骤
- 中职计算机基础知识点笔记3
- 用spss进行数据的标准化处理_spss 如何进行数据标准化_spss原始数据标准化_spss数据标准化处理 如何使用SPSS做时间序列分析_spss时间序列分析...
- 千月最新影视APICLOUD完整安卓程序源码+UI非常不错
- 如何解决Access denied for user ''@'localhost' (using password: NO)错误
- 基于 Amazon Nitro Enclaves 构建安全的可信执行环境
- pb调用计算机默认游览器,PB打开ole控件IE浏览器版本问题_指定Webbrowser控件所用IE内核版本(转)...
- iPhone手机 app加密和换图标
- Windows变慢原因分析及解决方法·系统篇
- halcon初级应用攻略