*注——代码非博主本人所写,仅供学习参考,侵删

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)
7

    !是逻辑运算符(与||,&&是一类符号),表示逻辑取反,可以把非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)

21  set可以用作滑动窗口
    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竞赛笔记的更多相关文章

  1. 知乎上的一些文章---leetcode【笔记1】

    张土汪 http://github.com/shawnfan Java{script}代码仔 42 人赞同 [1.19.2017] 更新: 2017年1月17日, 陪我征战多年的 2014 MackB ...

  2. 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 ...

  3. 110.Balanced Binary Tree Leetcode解题笔记

    110.Balanced Binary Tree Given a binary tree, determine if it is height-balanced. For this problem, ...

  4. leetcode学习笔记--开篇

    1 LeetCode是什么? LeetCode是一个在线的编程测试平台,国内也有类似的Online Judge平台.程序开发人员可以通过在线刷题,提高对于算法和数据结构的理解能力,夯实自己的编程基础. ...

  5. LeetCode算法笔记目录

    贪心算法: LeetCode翻转矩阵后的得分-Python3<六> LeetCode根据身高重建队列-Python3<七> LeetCode 任务调度器-Python3< ...

  6. leetcode算法笔记:二叉树,动态规划和回溯法

    在二叉树中增加一行 题目描述 给定一个二叉树,根节点为第1层,深度为 1.在其第 d 层追加一行值为 v 的节点. 添加规则:给定一个深度值 d (正整数),针对深度为 d-1 层的每一非空节点 N, ...

  7. LeetCode解题笔记 - 20. Valid Parentheses

    这星期听别人说在做LeetCode,让他分享一题来看看.试了感觉挺有意思,可以培养自己的思路,还能方便的查看优秀的解决方案.准备自己也开始. 解决方案通常有多种多样,我觉得把自己的解决思路记录下来,阶 ...

  8. Leetcode学习笔记(5)

    之前断了一段时间没做Leetcode,深感愧疚,重新续上 题目1 ID104 给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数. 说明: 叶子节点是指没有子节点 ...

  9. Leetcode学习笔记(4)

    题目1 ID121 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股 ...

随机推荐

  1. 多线程高级篇1 — JUC — 只弄到处理高并发集合问题

    1.线程池 1.1).什么是线程池? 池( pool ),就是一个容器,所以线程池就是把多个线程对象放到一个容器中 1.2).如何创建线程池? 先来了解几个常识 Executor -- 这是一个接口( ...

  2. Swift-技巧(十一)重写运算符

    摘要 基础数据的运算可以直接使用四则运算符.在 Swift 中也可以通过重写四则运算符的方式,让 struct 或者 class 创建的结构体或者对象也能像基础数据那样直接使用四则运算符. Swift ...

  3. 100个Shell脚本——【脚本4】自定义rm命令

    [脚本4]自定义rm命令 linux系统的rm命令太危险,一不小心就会删除掉系统文件. 写一个shell脚本来替换系统的rm命令,要求当删除一个文件或者目录时,都要做一个备份,然后再删除.下面分两种情 ...

  4. NSMutableArray-->NSString

    1.如何把NSMutableArray 转化为NSString//用字符将NSArray中的元素拼接起来 NSArray *array = [NSArray arrayWithObjects:@&qu ...

  5. redis入门到精通系列(七):redis高级数据类型详解(BitMaps,HyperLogLog,GEO)

    高级数据类型和五种基本数据类型不同,并非新的数据结构.高级数据类型往往是用来解决一些业务场景. (一)BitMaps (1.1) BitMaps概述 在应用场景中,有一些数据只有两个属性,比如是否是学 ...

  6. Zookeeper客户端链接

    一.zkCli.sh ./zkCli.sh -server 39.97.176.160:2182 39.97.176.160 : zookeeper服务器Ip 2182:zookeeper端口 二.Z ...

  7. SpringMVC中@RestController和@Controller的区别

    在使用SpringMVC时,对于Controller中的注解@RestController和@Controller需要我们区分清楚 @RestController注解相当于@ResponseBody和 ...

  8. DT10功能介绍--DT10多波示波器

    功能介绍 有些嵌入式软件方面的问题,利用传统的调试器可能无法解决,而通过逻辑分析器则能有效地解决.请仔细阅读本文, 看我们如何一步一步地讲解在这种情况下所需的配置. 但是,从传统意义上讲,逻辑分析器是 ...

  9. MQTT协议 - arduino ESP32 通过精灵一号 MQTT Broker 进行通讯的代码详解

    前言 之前研究了一段时间的 COAP 协议结果爱智那边没有测试工具,然后 arduino 也没有找到合适的库,我懒癌发作也懒得修这库,就只能非常尴尬先暂时放一放了.不过我在 爱智APP -> 设 ...

  10. cmcc_simplerop

    这是一道系统调用+rop的题. 先来就检查一下保护. 32位程序,只开启了堆栈不可执行.ida看一下伪代码. 代码也很简洁,就是直接让你溢出.这里ida反汇编显示的v4具体ebp的距离是0x14,再加 ...