leet

基础知识

C++

向量vector

#include<vector>
using namespace std;

定义

vector<int> vi;
vector<vector<int>> vii;

访问:1.下标,2.迭代器

for(int i=0; i<vi.size(); i++)
for(vector<int>::iterator it=vi.begin();it!=vi.end(); it++)

常用函数

  1. vi.push_back(x) 在末尾添加元素
  2. vi.pop_back() 删除末尾元素
  3. vi.size() 获取大小
  4. vi.clear() 清空
  5. vi.insert(it, x); 在it处插入元素x
  6. vi.erase(it); 删除it处的元素
  7. vi.erase(first, last); 删除[first, last)内所有元素

vector的初始化

初始化多个值

vector<int> list = {1,2,3.0,4,5,6,7};
vector<int> list3 {1,2,3.0,4,5,6,7};

根据数组或其他vector初始化

int a[5] = {...};
vector<int> list(a, a+sizeof(a)/sizeof(int));
vector<int> list
vector<int> list3(list.begin() + 2, list.end() - 1);

set 集合

内部有序,不含重复元素

#include<set>
using namespace std;

定义

set<int> s;

访问:只能通过迭代器访问

for(vector<int>::iterator it=s.begin(); it!=s.end(); it++)

常用函数

  1. s.insert(x); 插入
  2. s.find(value); 返回值为value的迭代器
  3. s.erase(it); 删除it处的元素
  4. s.erase(value); 删除value;
  5. s.erase(first, last); 删除区间为[first, last]内的元素
  6. s.size()
  7. s.clear()

字符串

#include<string>
using namespace std;

定义

string st;

访问

for(int i=0; i<st.length(); i++) printf("%c", st[i])
for(c:s) {if(c==' ')}

输入输出

//输入输出一整行
cin>>st;
cout<<st;

常用函数

  1. str3 = str1 + str2; //拼接
  2. == , != , < , <= , > , >= 字典序
  3. length() / size() 长度
  4. str.insert(pos, str2); //在str的pos位置插入str2
  5. str.erase(it) / str.erase(first, last)
  6. str.clear()
  7. str.substr(pos, len); //返回位置pos开始,长度为len的子串
  8. str.find(str2); 返回str2在str中第一次出现的位置,如果不是子串,返回string::npos
  9. str.replace(pos, len, str2); // 把str中从pos开始,长为len的子串替换为str2
  10. str.replace(it1, it2, str2); // 把str中[it1, it2)替换为str2
  11. s.resize(length)

int pos = s.find(" “) ; pos:子串所在位置
s.replace(pos, 1, “%10”); //将s[pos+1]替换为”%10"

int pos = s.find(" ");//查找子串在目前字符串中的位置,找不到返回-1
        while( pos != -1 )
        {
            s = s.replace(pos,1,"%20");//将字符串中以某个位置开始的指定长度替换为目前字符串
            pos = s.find(" ");
        }

map

#include<map>
using namespace std;

定义

map<string, int> mp;

访问

mp['c'] = 20;
for(map<string, int>::iterator it = mp.begin(); it!=mp.end(); it++)
it->first 访问键。it->second 访问值

常用函数

  1. mp.find(‘b’); // 返回键为key的映射的迭代器
  2. mp.erase(it); // mp.erase(key); // mp.erase(first, last);
  3. mp.size();
  4. mp.clear();

stack 栈

#include<stack>
using namespace std;

定义

stack<int> st;

访问

st.top(); //访问栈顶元素

函数

  1. st.push(x); //压入
  2. st.top(); // 取栈顶
  3. st.pop(); // 弹出
  4. st.empty(); //判空
  5. st.size();

queue 队列

#include<queue>
using namespace std;

定义

queue<int> q;

访问

q.front(); //访问队首元素
q.back(); //访问队尾元素

常用函数

  1. q.push(x); 压入
  2. q.pop(); 弹出队首元素
  3. q.empty(); 贩毒案是否为空 //-> true/false
  4. q.size();

deque 双端队列

#include<queue>
using namespace std;

定义

deque<int> dq;

dq.push_front(x)  头部增加一个元素X
dq.push_back(x)  尾部增加一个元素x
dq.insert(it, x)  it位置前增加一个元素x
dq.insert(it, n, x)  it位置前增加n个相同的元素x
dq.insert( it, first, last)  it前插入另一个相同类型向量的[forst,last)间的数据

Iterator erase(iterator it):删除双端队列中的某一个元素
Iterator erase(iterator first,iterator last):删除双端队列中[first,last)中的元素
void pop_front():删除双端队列中最前一个元素
void pop_back():删除双端队列中最后一个元素
void clear():清空双端队列中最后一个元素

algorithm头文件的函数

#include<algorithm>
using namespace std;
  1. max(x, y); //返回x,y中的最大值
  2. min(x, y); //返回x,y中的最小值
  3. abs(x); // 返回x的绝对值
  4. swap(x, y); // 交换x和y的值
  5. reverse(it1, it2); // 将数组指针在[it1, it2)中的元素反转
int a[10] = {10,5,6,11,13,15};
reverse(a, a+5);
  1. fill() 数组或容器对应范围内赋相同值
int a[10];
reverse(a, a+5, 233);
  1. sort(); 排序
int a[10] = {10,5,6,11,13,15};
sort(a, a+5);  // 从小到大排序
bool cmp(int a, int b){
    return a>b;
}
int a[10] = {10,5,6,11,13,15};
sort(a, a+5, cmp);  // 从大到小排序

位运算

二叉树

BFS

DFS

vector<int> levelOrder(TreeNode* root) {
        vector<int> res;
        if(!root)
            return res;
        queue<TreeNode*> q;
        q.push(root);
        while(q.size()){
        	//取队首元素top
            TreeNode* node=q.front();
            q.pop();
            //访问队首元素top并弹出
            res.push_back(node->val);
            //将队首元素top的下一层元素全部入队,并设置成已入队
            if(node->left)
                q.push(node->left);
            if(node->right)
                q.push(node->right);
        }
        return res;

    }

排列组合

C n m = n ! m ! ( n − m ) ! C^m_n=\frac{n!}{m!(n-m)!} Cnm=m!(nm)!n! A n m = n ! ( n − m ) ! A^m_n=\frac{n!}{(n-m)!} Anm=(nm)!n!

DFS

31
33
54

BFS

32
55

动态规划

42
46
63

排序

45

二分法

53

位运算

56
65

滑动窗口/双指针

57

字符串

58

递推

【约瑟夫环】62

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值