![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
STL
小胡同的诗
千里之行,始于足下
展开
-
C++nth_element接口使用
前言有这么一类问题,是寻找区间内的第k大或者说第k小(实际上这两个是一个问题),解决算法有排序,权值线段树、主席树、树套树等,但是要么就是复杂度不满意或者不好写。根据快速排序的分治思路,我们还可以在O(n)O(n)O(n)的时间内找到答案,但并不能保证有序,并且STL十分贴心地把这个算法封装到 nth_element 中,本文就是介绍这个接口地使用。原理前言中提到,这个接口的期望复杂度是 O(n)O(n)O(n) ,我们可以假设每次选取的分段标志为最优大致证明一下:T(n)=T(n/2)+n=T(n原创 2020-09-09 15:36:04 · 223 阅读 · 0 评论 -
LeetCode31 下一个排列(思维 next_permutation实现)
题目链接:leetcode31题目大意实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1解题思路next_permutation利用『algorithm』包下的 API ,当返回为false时说明完全逆序,反转原创 2020-08-25 15:28:13 · 137 阅读 · 0 评论 -
HDU4546比赛难度(优先堆+思维 好题)
题目链接:hdu4546题目大意:给n长度的数字序列,从中取出k个元素(0<k<=n)求和,找出k个元素之和为第m小的和值。解题思路:第一次做这样组合的题,第一直觉会想用爆搜穷举出所有组合,然后扔进multiset中维护这些值,搜索的复杂度是指数级,内存也超限。发现找到第m个小的可以直接用优先队列来模拟,因为m<10000,所以可以模拟到第m大就结束(其实用multiset也...原创 2019-02-08 23:18:34 · 468 阅读 · 0 评论 -
剑指offer--栈的压入、弹出序列
模拟栈操作入栈前进行判断,空间复杂度大了O(n)class Solution {public: bool isPopOrder(vector<int> pushV,vector<int> popV) { if (pushV.size() != popV.size()) { return false; ...原创 2019-03-10 23:44:17 · 114 阅读 · 0 评论 -
蓝桥杯--2014第五届C/C++C组省赛
标题:武功秘籍 小明到X山洞探险,捡到一本有破损的武功秘籍(2000多页!当然是伪造的)。他注意到:书的第10页和第11页在同一张纸上,但第11页和第12页不在同一张纸上。 小明只想练习该书的第81页到第92页的武功,又不想带着整本书。请问他至少要撕下多少张纸带走?这是个整数,请通过浏览器提交该数字,不要填写任何多余的内容。#include &amp;lt;bits/stdc...原创 2019-03-15 21:20:15 · 365 阅读 · 0 评论 -
剑指offer--把数组排成最小的数(思维)
思路1(暴力搜索) O(n!∗n)O(n!*n)O(n!∗n)就是直接暴力搜所有排列的情况复杂度分析:先不考虑是否有重复的情况每个位置选数就是个全排列,中规模的数据就一定超时代码省略思路2(贪心) O(n2logn)O(n^2logn)O(n2logn)利用排序的思路将相邻两个数字组合,采取较小的那种组合方式进行排序,因为:如果A<B(A,B指的是每个位的数字),那...原创 2019-03-13 15:39:43 · 136 阅读 · 0 评论 -
PAT --甲级1011(1011 World Cup Betting)
1011 World Cup Betting (20 分)With the 2010 FIFA World Cup running, football fans the world over were becoming increasingly excited as the best players from the best teams doing battles for the World ...原创 2019-04-23 11:43:19 · 100 阅读 · 0 评论 -
FZU2219 StarCraft(思维 哈夫曼树构造变形)
题目大意:给T组数据,之后一行n,m,k分别表示n个建筑,初始m个兵,一个兵生产一个兵要k时间。接下来n个数分别表示建造对应建筑要消耗的时间,求最少要多少时间?一个兵生产后还可以工作,工作后要将其移除。思路:贪心,类似于哈夫曼建树的过程,具体思路见模拟哈夫曼建树(好题)Code:错误思路#include <iostream>#include <queue>#in...原创 2019-04-18 23:54:31 · 149 阅读 · 0 评论 -
LeetCode898子数组按位异或操作(单调型动态规划)
题目链接:leetcode898dp[i]表示以A[i]为结尾的序列的区间或的不同个数,它肯定能够由之前的状态或上A[i]值会改变的所有状态传递过来也就是说,之前的状态需要去重,可以用上一个集合去重,最好输出集合的个数即dp要求的最终状态注意这个状态一定是连续的!!优化,由于或的特性,之后的状态与前面的状态不同一定是产生了更大的数才需要更新否则不更新通过单调性优化的思路目前自己还想不...原创 2019-09-30 08:12:39 · 402 阅读 · 0 评论 -
HDU2572终曲(枚举+STL)
题目链接:hdu2572解题思路:水题…但是WA了好几发,一直想在原串中剪切,然后得到符合的串。不过要考虑的case很多。数据规模小,完全可以暴力枚举所有字串,然后匹配。AC代码:#include <cstdio>#include <cstring>#include <cstdlib>#include <cmath>#include ...原创 2019-02-07 17:29:04 · 187 阅读 · 0 评论 -
C++string类API
原 C++string类的常用方法 2018年09月01日 13:41:14 咸鱼程序员 阅读数:259 在使...转载 2019-02-07 16:02:50 · 2260 阅读 · 1 评论 -
C++string的使用(2)
#include &lt;iostream&gt;#include &lt;string&gt;#include &lt;algorithm&gt;#include &lt;cstring&gt;using namespace std;int main(){ string str1 = "hello";转载 2019-02-07 15:32:36 · 530 阅读 · 1 评论 -
STL优先队列的用法
#include#includeusing namespace std;struct node1{ bool operator () (int &a,int &b) //或者(int a,int b) { return a>b; }}; //优先级为小的 可以用less替换struct node2{ bool operator () (int a,int b)原创 2018-02-03 22:11:25 · 158 阅读 · 0 评论 -
STL二分查找
#include<cstdio>#include<cstring>#include<stdlib.h>#include<iostream>#include<algorithm>#include<queue>using namespace std;int main(){ double num[10]={1,2,3,4,4,...原创 2018-02-15 22:33:06 · 157 阅读 · 0 评论 -
HDU1027(STL)
题目大意:全排列有关全排列:1.点击打开链接2.点击打开链接解题思路:评论区挺多大佬当搜索写了这题,自己学习STL大法过的,差距还是有的 努力啊。AC代码如下:#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<queue>...原创 2018-02-16 23:06:11 · 188 阅读 · 0 评论 -
C++deque容器使用
前言deque的数据结构是一个 双端队列 ,同时内存中的通过一个中继器让元素之间内存位置处于相邻,但实际上这不是真正意义上的相邻,这就类似于 操纵系统 中提到的文件系统的管理方式,系统提供一张表把要相邻的物理内存指针存到一块,访问的时候使用这些指针。使用相比于 vector 容器,deque的用法几乎一致但是不同的是deque提供push_front以及pop_front方法,这里的时间效率...原创 2019-02-01 08:43:42 · 254 阅读 · 0 评论 -
C++vector容器使用
简介Vectors 包含着一系列连续存储的元素,其行为和数组类似。访问Vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是线性时间复杂度。实验#include <iostream>#include <vector>using namespace std;/** * vector...原创 2019-01-27 21:57:40 · 116 阅读 · 0 评论 -
C++priority_queue容器使用
前言在图搜索时经常 用到宽搜来求得最短路,而有这样一类题目在求得最短路时又要使得 花费(cost可以是任意一种要求,比如改变方向的次数或者其他)最小 ,这样每次队列中出队的元素就要满足元素优先出队。STL中的 priority_queue(优先队列) 就可以解决这样的问题。这样的模板类在头文件中,内部实现是 堆。使用细节优先队列与队列的差别在于优先队列不是按 照入队的顺序出队,而是按照队列...原创 2019-02-03 16:16:28 · 550 阅读 · 0 评论 -
STL容器的元素类型传递测试
前言STL的容器模板类在添加元素的时候,采用拷贝构造,并且是浅拷贝,而不是直接传递指针,这意味这系统要多开辟一块内存来满足容器的使用。如果要正确使用STL容器对各种对象操作要注意重载拷贝构造函数,也就是变成深拷贝。使用细节测试代码使用到了vector向量,而每次他都调用当前元素相应个数的析构以及拷贝构造。这其中的原因是vector初始化大小为1,然后每次添加元素进去它都会改变大小来满足元素个...原创 2019-02-03 18:49:38 · 222 阅读 · 0 评论 -
C++set容器使用
前言STL的set是一个二叉排序树,也称为集合,其在STL内部实现是红黑树,能够将元素默认从小到大 排序或者是字典序 排序。如果声明的元素类型不是基本数据类型而是自定义的类要给它一个比较器,类似于sort的compare。使用细节比较器仿函数传进来的类要加const修饰符,而这就是使得类中要调用的成员方法也要修饰const。(const对象只能访问const方法)。set中的二分查找方法...原创 2019-02-03 21:31:02 · 225 阅读 · 0 评论 -
C++string的使用
调库:#include#include#include#includeusing namespace std;int main(){ string str="aabcdefg"; string str1="hijklmn"; const char *p="opqrst"; string str2=p; string str4; int i; //用数组的方法遍历str原创 2018-01-31 21:27:06 · 3863 阅读 · 1 评论