算法
那就等雨停吧
-
展开
-
代码随想录day10:栈与队列part01(用栈实现队列,用队列实现栈)
时间复杂度: push和empty为O(1), pop和peek为O(n)空间复杂度: O(n)原创 2024-01-19 18:34:55 · 457 阅读 · 0 评论 -
代码随想录day8:字符串part01(反转字符串,反转字符串II,替换数字,翻转字符串里的单词,右旋转字符串)
字符串part01反转字符串时间复杂度: O(n)空间复杂度: O(1)原创 2024-01-17 23:09:05 · 425 阅读 · 0 评论 -
代码随想录day6:哈希表part01(有效的字母异位词,两个数组的交集,快乐数,两数之和)
时间复杂度: O(n)空间复杂度: O(1)原创 2024-01-15 23:13:58 · 448 阅读 · 0 评论 -
代码随想录day4:链表part02(两两交换链表中的节点 ,删除链表的倒数第N个节点,链表相交,环形链表II)
交换过程分三个步骤时间复杂度:O(n)空间复杂度:O(1)原创 2024-01-13 18:33:58 · 453 阅读 · 0 评论 -
代码随想录day3:链表part01(移除链表元素 ,设计链表,反转链表)
法一:直接使用原来的链表来进行移除节点操作时间复杂度: O(n)空间复杂度: O(1)法二:设置一个虚拟头结点在进行移除节点操作时间复杂度: O(n)空间复杂度: O(1)原创 2024-01-12 23:33:30 · 398 阅读 · 0 评论 -
代码随想录day2:数组part02(有序数组的平方 ,长度最小的子数组 ,螺旋矩阵II,数组章节总结)
法一:暴力,先把每个元素平方再排序,时间复杂度O(n + nlogn)法二:双指针,时间复杂度O(n)二、长度最小的子数组法一:暴力,时间复杂度:O(n^2),空间复杂度:O(1)法二:滑动窗口,时间复杂度:O(n),空间复杂度:O(1)为什么时间复杂度是O(n)。不是for里放一个while就是O(n^2), 主要是看每一个元素被操作的次数,每个元素在滑动窗后进来操作一次,出去操作一次,每个元素都是被操作两次,所以时间复杂度是 2 × n 也就是O(n)。类似二分的思想,原创 2024-01-11 22:17:29 · 535 阅读 · 0 评论 -
代码随想录day1:数组part01(二分查找 ,删除数组指定元素)
1、维护[left,right]2、维护[left,right)时间复杂度:O(n^2)二、删除数组指定元素。空间复杂度:O(1)时间复杂度:O(n)空间复杂度:O(1)原创 2024-01-10 23:38:12 · 465 阅读 · 1 评论 -
二分查找模板
// 二分查找#include<iostream>using namespace std;const int N = 1e5 + 10;int n, m; // 数组元素个数n和m个询问int q[N]; // 待查找的有序数组int main(){ cin >> n >> m; for (int i = 0; i < n; i++) cin >> q[i]; while (m--) { int x; cin &g.原创 2021-10-31 14:40:45 · 87 阅读 · 0 评论 -
前缀和模板
预处理时间复杂度:求前缀和时间复杂度:用空间来换取时间// 前缀和#include<iostream>using namespace std;const int N = 1e5 + 10;int n, m;int a[N], s[N]; // 输入的数组和前缀和数组,已初始化s[0]=0// 求前缀和的公式:s[r] - s[l - 1]int main(){ cin >> n >> m; for (int i = 1; i &原创 2021-10-29 13:41:55 · 112 阅读 · 0 评论 -
bfs模板
// BFS - 走迷宫#include<iostream>#include<cstring>#include<algorithm>using namespace std;typedef pair<int, int> PII;const int N = 110;int n, m;int g[N][N]; // g数组存地图int d[N][N]; // d数组存储每个点到起点的距离PII q[N*N]; // 模拟实现的队列i.原创 2021-10-24 21:14:35 · 139 阅读 · 0 评论 -
dfs模板
// DFS - 排列数字#include<iostream>using namespace std;const int N = 10;int n;int path[N]; // 该条路径上的数字排列bool st[N]; // 检查该数字是否用过,初始化为false,即未用过void dfs(int u){ // 该排列枚举已完成,输出该情况的排列 if (u == n) { for (int i = 0; i < n; i++) printf("%d.原创 2021-10-24 16:21:59 · 1577 阅读 · 0 评论 -
括号匹配(静态栈实现)
// 括号匹配#include<iostream>#include<string>using namespace std;const int N = 1010;char stk[N];int tt; // 栈内的元素个数int flag;// 入栈void push(char x) { stk[tt++] = x;}// 出栈char pop(){ if (tt == 0) { cout << "The stack is e.原创 2021-10-07 11:08:10 · 140 阅读 · 0 评论 -
二分查找(最基础的版本)
例如给定一组单调递增的数1 2 3 4 5 6 7 8 9 10比如我想找9,常规思想是需要遍历整组数而二分的思想是:先将9与中间的数比较,9比中间数大,所以查找范围缩小到[中间数+1,末尾数]按此方法逐步缩小范围,最终找到所需要找的数代码如下//基础二分#include<iostream>using namespace std;int q[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };int n = 10;int se原创 2021-07-22 16:01:57 · 124 阅读 · 0 评论 -
归并排序代码模板
#include<iostream>using namespace std;const int N = 1e6 + 10;int n;int q[N], tmp[N];void merge_sort(int q[], int l, int r){ if (l >= r) return; int mid = l + r >> 1; merge_sort(q, l, mid), merge_sort(q, mid + 1, r); int k = 0.原创 2021-07-21 08:22:02 · 54 阅读 · 0 评论 -
快速排序代码模板
#define _CRT_SECURE_NO_WARNINGS 1#include<iostream>using namespace std;const int N = 1e6 + 10;int n;int q[N];void quick_sort(int q[], int l, int r){ if (l >= r) return; int x = q[l], i = l - 1, j = r + 1; while (i < j) { do i++.原创 2021-07-20 16:48:04 · 64 阅读 · 0 评论