【C++】leetcode竞赛笔记
*注——代码非博主本人所写,仅供学习参考,侵删
20200516双周赛:
1 to_string(int a) 将a转换成字符串形式
2 gcd(int a,int b) 返回a,b的最大公约数,若返回1则表示a/b不可再约分
3 string + 字符串可以直接用+号来连接
4 vector<vector<int> > vec(N, vector<int>(M));
建立[N][M]二维 数组
20200517周赛
1 split(const string &s, char stop) 把字符串s用stop分离
vector<string> split(const string &s, char stop){
vector<string> ret;string t;
for (auto c : s)if(c == stop){ret.push_back(t);t = "";}else{t += c;}
ret.push_back(t);
return ret;
}
2 isupper(char c) 判断c是否是大写字母
3 sort(a,b,cmp) 对数组进行排序a表示起始位置,b是结束位置,cmp是排序标准的函数
//利用数组a对数组v简介排序,a中储存v的下标,排序a,然后按照a中的先顺序输出v,可以保证v位置不变
sort(a.begin(), a.end(),
[&](int i, int j){//匿名函数,[&]表示参数按引用捕获
//i表示排序后的位置在前的数,j表示排序后位置在后的数数
return v[i].size() < v[j].size() || v[i].size() == v[j].size() && i < j;//return 返回想要的结果
//v[i].size() < v[j].size() 要求前短后长
//v[i].size() == v[j].size() && i < j 要求前后通常的情况下,前面的 还是在前面(保持原来位置)
}
);
4 includes(bb.begin(),bb.end(),aa.begin(),aa.end()) 判断数组a是不是数组b的子集
int a[6]={1,2,3,4,5,9};
int b[7]={1,2,3,4,5,9,8};
vector<int> aa(a,a+6);
vector<int> bb(b,b+7);
sort(aa.begin(),aa.end());
sort(bb.begin(),bb.end());
bool f=includes(bb.begin(),bb.end(),aa.begin(),aa.end());
5 unordered_map查找复杂度O(n),普通map查找复杂度O(nlogn)
6 dfs,bfs的标记需要引用传参&,不能用形参
void fun(vector<vector<bool>>& bl,queue<node *>& que,vector<vector<int>>& m)
!是逻辑运算符(与||,&&是一类符号),表示逻辑取反,可以把非0值变成0,把0值变为1
~是位运算符(与|,&是一类符号),表示按位取反,在数值的二进制表示上,将0变为1,将1变为0
8 int 是进行拷贝构造,而const int & 是返回的引用- 拷贝构造更消耗时间,与此同时还用析构函数。因此for (const int& num : nums)比for (int num : nums)更快
9 ans+=n&1;与ans=ans+n&1;的结果不同_原因:加号的优先级大于位与的优先级,后面一个应该写成ans = ans + (n & 1)
10 在处理大量数据时数组速度远超vector速度,以下是建立数组的代码
bool * isp=new bool [n];
delete[] isp;
11 map可以使用map<map<char,int>,int>嵌套,而unordered_map不能使用嵌套
12 变量初始化 int start(0) 强制类型转换 char tmpChar = s[end];vec[int(tmpChar)] = end;
13 set<int> st;auto it = st.upper_bound(4);找set中第一个比4大的数
14 Set.contains(e) 查找set中是否含有e,返回布尔值
15 (v%k + k) % k 正确取模方法,包含正数和负数
16 快速去重
set<int> st(vec.begin(), vec.end());
vec.assign(st.begin(), st.end());
17 for(;;)速度比while(1)快
18 特殊数据结构初始化
vector<string> t={"a","b"};
map<int,int> m={{1,2},{3,4}};
19 multiset是<set>库中一个非常有用的类型,它可以看成一个序列,插入一个数,删除一个数都能够在O(logn)的时间内完成,而且他能时刻保证序列中的数是有序的,而且序列中可以存在重复的数
20 查找字符串中某字符第一次出现的位置 int pos=s.find('e'); if(pos == string::npos)
set.lower_bound(4)//查找第一个大于等于4的元素,返回此元素迭代器,未找到返回set.end()
set.upper_bound(4)//查找第一个大于4的元素,返回此元素迭代器,未找到返回set.end()
22 树集合,Java 中的 Treeset 或者 C++ 中的 set ,是由高度平衡的二叉搜索树实现的。因此,搜索、插入和删除的时间复杂度都是 O(logN)
散列集合,Java 中的 HashSet 或者 C++ 中的 unordered_set ,是由哈希实现的,当存在具有相同哈希键的元素过多时,将花费 O(N) 时间复杂度来查找特定元素
哈希集和树集之间的本质区别在于树集中的键是有序的。
23 输出数组的全排列
vector<vector<int>>res;
sort(nums.begin(),nums.end());
do{res.push_back(nums);}
while(next_permutation(nums.begin(),nums.end()));
return res;
24 for(int i=10;i>=0;i--)等效于for(int i=10;~i;i--) 注意~i=-1-i
25 using ll = long long;
26 在 C++ 中 set/multiset 是有序的集合,它们是基于红黑树实现的。其中 set 会对元素去重,而 multiset 可以有重复元素。
27 set最小是set.begin(),最大是set.rbegin(),set.end()储存着set.size()
【C++】leetcode竞赛笔记的更多相关文章
- 知乎上的一些文章---leetcode【笔记1】
张土汪 http://github.com/shawnfan Java{script}代码仔 42 人赞同 [1.19.2017] 更新: 2017年1月17日, 陪我征战多年的 2014 MackB ...
- 121. Best Time to Buy and Sell Stock (一) leetcode解题笔记
121. Best Time to Buy and Sell Stock Say you have an array for which the ith element is the price of ...
- 110.Balanced Binary Tree Leetcode解题笔记
110.Balanced Binary Tree Given a binary tree, determine if it is height-balanced. For this problem, ...
- leetcode学习笔记--开篇
1 LeetCode是什么? LeetCode是一个在线的编程测试平台,国内也有类似的Online Judge平台.程序开发人员可以通过在线刷题,提高对于算法和数据结构的理解能力,夯实自己的编程基础. ...
- LeetCode算法笔记目录
贪心算法: LeetCode翻转矩阵后的得分-Python3<六> LeetCode根据身高重建队列-Python3<七> LeetCode 任务调度器-Python3< ...
- leetcode算法笔记:二叉树,动态规划和回溯法
在二叉树中增加一行 题目描述 给定一个二叉树,根节点为第1层,深度为 1.在其第 d 层追加一行值为 v 的节点. 添加规则:给定一个深度值 d (正整数),针对深度为 d-1 层的每一非空节点 N, ...
- LeetCode解题笔记 - 20. Valid Parentheses
这星期听别人说在做LeetCode,让他分享一题来看看.试了感觉挺有意思,可以培养自己的思路,还能方便的查看优秀的解决方案.准备自己也开始. 解决方案通常有多种多样,我觉得把自己的解决思路记录下来,阶 ...
- Leetcode学习笔记(5)
之前断了一段时间没做Leetcode,深感愧疚,重新续上 题目1 ID104 给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数. 说明: 叶子节点是指没有子节点 ...
- Leetcode学习笔记(4)
题目1 ID121 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股 ...
随机推荐
- MySQL学习(一)——创建新用户、数据库、授权
一.创建用户 1.登录mysql mysql -u root -p 2.创建本地用户>/font> use mysql; //选择mysql数据库 create user 'test'@' ...
- 记录一下使用MySQL的left join时,遇到的坑
# 现象 left join在我们使用mysql查询的过程中可谓非常常见,比如博客里一篇文章有多少条评论.商城里一个货物有多少评论.一条评论有多少个赞等等.但是由于对join.on.where等关键字 ...
- github单独下载某一个文件夹
可以借助svn工具进行下载,实现只下载repo下的指定文件夹内容 背景 需要下载这个文件夹下所有内容https://github.com/rabbitmq/rabbitmq-tutorials/tre ...
- Linux基础命令---exportfs管理挂载的nfs文件系统
exportfs exportfs主要用于管理当前NFS服务器的文件系统. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.Fedora. 1.语法 /usr/sb ...
- oracle keep
语法: min | max(column1) keep (dense_rank first | last order by column2) over (partion by column3); -- ...
- error信息
/opt/hadoop/src/contrib/eclipse-plugin/build.xml:61: warning: 'includeantruntime' was not set, defau ...
- 通过静态分析和持续集成 保证代码的质量 (Helix QAC)1
前言 现代软件开发团队面临着很多挑战,这些挑战包括:产品交付期限越来越紧,团队的分布越来越广,软件的复杂度越来越高,而且对软件的质量要求越来越高. 本文分为两个章节.第一章讨论持续集成的原理,持续集成 ...
- 痞子衡嵌入式:在i.MXRT1170上启动含DQS的Octal Flash可不严格设Dummy Cycle (以MT35XU512为例)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是Octal或Hyper Flash上DQS信号与Dummy Cycle联系. 关于在 i.MXRT 上启动 NOR Flash 时如何设 ...
- 子组件dispatch导致其他页面刷新问题解决
问题: 现在有一个页面,包含"项目基本要素"和"供应链管控要素"多个组件,其中一个组件有表单级联,通过产品类型的不同选取去调接口获得产品名称的下拉 调接口是通过 ...
- 前端浅谈-协议相关(DNS协议)
从应用层到实体层的协议太多了,我们并不能一一涉及,目前来说就打算整理可能会与前端相关的协议. 前端面试常会问到一个问题-"从输入一个url到页面渲染经历了哪些过程".这其实是一个相 ...