acwing算法基础课

文章目录

    • 第一章 基础算法
      • 快速排序
      • 归并排序
      • 二分
      • 高精度
      • 前缀和与差分
      • 双指针算法
      • 位运算
      • 离散化
      • 区间合并
    • 第二章 数据结构
      • 单链表
      • 双链表
      • 队列
      • 单调栈
      • 单调队列
      • KMP
      • Trie
      • 并查集
      • 哈希表
      • C++ STL
    • 第三章 搜索与图论
      • DFS
      • BFS
      • 树与图的深度优先遍历
      • 树与图的广度优先遍历
      • 拓扑排序
      • Dijkstra
      • bellman-ford
      • spfa
      • Floyd
      • Prim
      • Kruskal
      • 染色法判定二分图
      • 匈牙利算法

基础课笔记

第一章 基础算法

包括排序、二分、高精度、前缀和与差分、双指针算法、位运算、离散化、区间合并等内容。

快速排序

  • 快速排序
  • 第k个数

归并排序

  • AcWing 787. 归并排序
  • AcWing 788. 逆序对的数量

二分

  • AcWing 789. 数的范围
  • AcWing 790. 数的三次方根

高精度

  • AcWing 791. 高精度加法
  • AcWing 792. 高精度减法
  • AcWing 793. 高精度乘法
  • AcWing 794. 高精度除法

前缀和与差分

  • AcWing 795. 前缀和
  • AcWing 796. 子矩阵的和
  • AcWing 797. 差分
  • AcWing 798. 差分矩阵

双指针算法

  • AcWing 799. 最长连续不重复子序列
  • AcWing 800. 数组元素的目标和
  • AcWing 2816. 判断子序列

位运算

  • AcWing 801. 二进制中1的个数

离散化

  • AcWing 802. 区间和

区间合并

  • AcWing 803. 区间合并

第二章 数据结构

包括单链表,双链表,栈,队列,单调栈,单调队列,KMP,Trie,并查集,堆,哈希表等内容。

单链表

双链表

队列

单调栈

单调队列

KMP

Trie

并查集

哈希表

C++ STL

vector, 变长数组,倍增的思想

  • size() 返回元素个数
  • empty() 返回是否为空
  • clear() 清空
  • front()/back()
  • push_back()/pop_back()
  • begin()/end()
  • []
    支持比较运算,按字典序

pair

  • first, 第一个元素
  • second, 第二个元素
  • 支持比较运算,以first为第一关键字,以second为第二关键字(字典序)

string,字符串

  • size()/length() 返回字符串长度
  • empty()
  • clear()
  • substr(起始下标,(子串长度)) 返回子串
  • c_str() 返回字符串所在字符数组的起始地址

queue, 队列

  • size()
  • empty()
  • push() 向队尾插入一个元素
  • front() 返回队头元素
  • back() 返回队尾元素
  • pop() 弹出队头元素

priority_queue, 优先队列,默认是大根堆

  • size()
  • empty()
  • push() 插入一个元素
  • top() 返回堆顶元素
  • pop() 弹出堆顶元素
  • 定义成小根堆的方式:priority_queue q;

stack, 栈

  • size()
  • empty()
  • push() 向栈顶插入一个元素
  • top() 返回栈顶元素
  • pop() 弹出栈顶元素

deque, 双端队列

  • size()
  • empty()
  • clear()
  • front()/back()
  • push_back()/pop_back() 从后插入弹出
  • push_front()/pop_front() 从前插入弹出
  • begin()/end()
  • []

set, map, multiset, multimap, 基于平衡二叉树(红黑树),动态维护有序序列

  • size()
  • empty()
  • clear()
  • begin()/end()
  • ++, – 返回前驱和后继,时间复杂度 O(logn)

set/multiset

  • insert() 插入一个数
    • find() 查找一个数

    • count() 返回某一个数的个数

    • erase()
      (1) 输入是一个数x,删除所有x O(k + logn)
      (2) 输入一个迭代器,删除这个迭代器
      lower_bound()/upper_bound()

    • lower_bound(x) 返回大于等于x的最小的数的迭代器

    • upper_bound(x) 返回大于x的最小的数的迭代器

map/multimap

  • insert() 插入的数是一个pair
  • erase() 输入的参数是pair或者迭代器
  • find()
  • [] 注意multimap不支持此操作。 时间复杂度是 O(logn)
  • lower_bound()/upper_bound()

unordered_set, unordered_map, unordered_multiset, unordered_multimap, 哈希表

  • 和上面类似,增删改查的时间复杂度是 O(1)
  • 不支持 lower_bound()/upper_bound(), 迭代器的++,–

bitset, 圧位

  • bitset<10000> s;

  • ~, &, |, ^

  • >>, <<

  • ==, !=

  • []

  • count() 返回有多少个1

  • any() 判断是否至少有一个1

  • none() 判断是否全为0

  • set() 把所有位置成1

  • set(k, v) 将第k位变成v

  • reset() 把所有位变成0

  • flip() 等价于~

  • flip(k) 把第k位取反

第三章 搜索与图论

包括DFS,BFS,树与图的深度优先遍历,树与图的广度优先遍历,拓扑排序,Dijkstra,bellman-ford,spfa,Floyd,Prim,Kruskal,染色法判定二分图,匈牙利算法等内容。

DFS

BFS

树与图的深度优先遍历

树与图的广度优先遍历

拓扑排序

Dijkstra

bellman-ford

spfa

Floyd

Prim

Kruskal

染色法判定二分图

匈牙利算法

你可能感兴趣的:(acwing,算法,数据结构)