leet code 笔记

好文章 :
整理leetcode刷题过程中遇到的常用库函数(c++)
https://blog.csdn.net/i_choose_game/article/details/125585562

力扣刷题常用的c++库函数
https://blog.csdn.net/weixin_45510561/article/details/125243585?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-125243585-blog-125585562.pc_relevant_3mothn_strategy_and_data_recovery&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-125243585-blog-125585562.pc_relevant_3mothn_strategy_and_data_recovery&utm_relevant_index=1

C++ 常用头文件

#include <algorithm>    //通用算法

#include <deque>    //双端队列容器

#include <list>    //线性列表容器

#include <map>      //映射容器

#include <iostream>    //基本输入输出流

#include <queue>    //队列容器

#include <set>    //集合容器

#include <stack>     //堆栈容器   

#include <string>    //字符串类

#include <vector>   //动态数组容器

#include <hash_map> //字典(hash map)

#include <math>       //数学函数类

结构体生成内存申请

malloc与new,C++中的指针与引用,C++struct与class的区别

  • new 不但分配对bai象空间, 还会在分配后调用对du象的构造器, 而 malloc 只是分配zhi, 不构
  • new 分配时要指定类型, 是类型安全的; 而 malloc 返回的是 void *, 类型不安全; 类型不安全的东西在 C++ 里是不被提倡的!
## malloc
ListNode* l = (struct ListNode *)malloc(sizeof(struct ListNode));
## new
ListNode* l = new ListNode(0);

std::vector<char> * 转std::string 的三种方法

cp from https://www.iteye.com/blog/hulefei29-1974759

1.  std::vector<char> *data = response->getResponseData();  
2.  std::string res;  
3.  //way1  
4.  for (int i = 0;i<data->size();++i) {  
5.  res+=(*data)[i];  
6.  }  
7.  res+='\0';  
8.  std:cout << res;  


1.  std::vector<char> *data = response->getResponseData();  
2.  std::string res;  
3.  res.insert(res.begin(), data->begin(), data->end());  
4.  std::cout << res;  


1.  std::vector<char> *data = response->getResponseData();  
2.  std::string res;  
3.  const char* s = &(*data->begin());  
4.  res = std::string(s, data->size());  
5.  std::cout << res;

vector 排序

字母用数组替代hashmap

image.png

filter set 的使用

        set<string> filter_set;  // for filtering 
        for (auto & item : m_policy_ctx->input_items){
            if (filter_set.insert(item->feedid).second)
            {
                input_items_after_ranking.push_back(item);
            } 
        }

char数字转int类型

例如把char a = ‘2’ 转2 :int num = a-'0';

c++ 将一个char 转化为string

https://blog.csdn.net/carbon06/article/details/79353821

image.png

string可以直接+=char

    string replaceSpace(string s) {
        string ans;
        for(int i = 0; i<s.size(); i++) {
            if(s[i] == ' ') {
                ans +="%20";
            }
            else    ans+=s[i];
        }
        return ans;
    }
class Solution {
public:
    string replaceSpace(string s) {
        std::string result;
        for (int i = 0; i < s.size(); i++) {
            if (s[i] == ' ') {
                result.append("%20");
            }
            else {
                result.push_back(s[i]);
            }
        }
        return result;
    }
};

C++ Set 基本使用

image.png

C++ map unordered_map 基本使用

image.png

删除

删除键为bfff指向的元素
 
cmap.erase("bfff");
 
 
删除迭代器 key所指向的元素
map<string,int>::iterator key = cmap.find("mykey");
  if(key!=cmap.end())
 {
    cmap.erase(key);
 }
 
删除所有元素

————————————————
版权声明:本文为CSDN博主「「已注销」」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zvall/article/details/52267007

C++ Vector 基本使用

C++ vector 删除元素
vec.pop_back()

在vector中有三种涉及删除的方法,第一种是vector::clear(),第二种是vector::erase(),第三种是vector::pop_back()。clear用来清空整个vector,同时将size变成0,无返回值;erase通过传入迭代器进行删除,既可以删除单个元素,也可以删除某一范围的元素,删除之后它将返回下一个位置的迭代器;pop_back用来删除末尾元素,同时将size减1,无返回值。

一般来讲erase用得比较多,不注意也容易踩坑,例如:

vector<int> vec{1, 4, 3, 2, 5, 2};
    
for(auto it = vec.begin(); it != vec.end(); it++){
    if(*it < 3){
        cout << "num is " << *it << endl;
        it = vec.erase(it);
        if(it == vec.end()) break;
    }
}

这个代码如果不在for循环里加上最后的判断会导致错误,原因在于,当it指向最后一个2时,满足删除条件,删除后it变成了end,然后又做了++操作,导致越界。

类似的坑还有许多,这里就不一一列举了,总之,它们的共同点在于对vector进行删除时都不够优雅,需要进行一些额外的处理避免误操作。
原文链接:https://blog.csdn.net/lishichengyan/java/article/details/82669153

正确代码:

vector<int> vec{1, 4, 3, 2, 5, 2};
    
for(auto it = vec.begin(); it != vec.end();){
    if(*it < 3){
        cout << "num is " << *it << endl;
        it = vec.erase(it);
        
    }
    else {
      iter++;
    }
}
C++ vector 反转
reverse(res.begin(),res.end());
C++ Vector 预分配大小
std::vector<int> nums(count);  // 预分配 count 个空间。

// 加上默认赋值
std::vector<int> nums(count,default_num);

// 或者 
std::vector<int> nums;
nums.resize(5);

C++ 栈的使用

注意 pop()函数是没有返回的,需要先

auto val = stack1.top();
stack1.pop();
image.png

和其他序列容器相比,stack 是一类存储机制简单、所提供操作较少的容器。下面是 stack 容器可以提供的一套完整操作:
top():返回一个栈顶元素的引用,类型为 T&。如果栈为空,返回值未定义。
push(const T& obj):可以将对象副本压入栈顶。这是通过调用底层容器的 push_back() 函数完成的。
push(T&& obj):以移动对象的方式将对象压入栈顶。这是通过调用底层容器的有右值引用参数的 push_back() 函数完成的。
pop():弹出栈顶元素。
size():返回栈中元素的个数。
empty():在栈中没有元素的情况下返回 true。
emplace():用传入的参数调用构造函数,在栈顶生成对象。
swap(stack<T> & other_stack):将当前栈中的元素和参数中的元素交换。参数所包含元素的类型必须和当前栈的相同。对于 stack 对象有一个特例化的全局函数 swap() 可以使用。

C++ 队列(queue)的使用

入队(push)
出队(pop)
判断队列是否为空(empty)
统计队列元素的个数(size)
访问队首元素(front)

C++ sort

sort(vec.begin(), vec.end());

C++ Vector直接赋值

vector<int> nums = {1,2};

C++ Vector 和 set 互相转换

vector<int> v;
v = {1,2,2,3,3,4};//建立vector
set<int> st(v.begin(), v.end());//在构造函数中可以直接实现vector转set
v.assign(st.begin(), st.end());//用assign实现set转vector

C++ 字符数 stringstream 使用

#include <sstream>
#include <string>

    stringstream sstream;
    // 将多个字符串放入 sstream 中
    sstream << "first" << " " << "second";
    sstream << " third times";
    cout << "输出字符串: " << sstream.str() << endl;
    // 清空 sstream
    sstream.str("");
    sstream << "one more time";
    cout << "清空字符串后,输出为: " << sstream.str() << endl;

C++ 二维数组

见:https://blog.csdn.net/Ginny97/article/details/109248707

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349