🛸~~ 🚁🚁🚁🛩️🛩️🛩️|

n1ce2cv

园龄:5年2个月粉丝:4关注:1

随笔分类 -  算法

单调队列
摘要:单调队列 经典用法:维持滑动窗口滑动过程中的最大值或最小值。最大值时,单调队列从头到尾降序 维持求解答案的可能性 单调队列里所有对象按照规定好的单调性组织 当某个对象从队尾进入单调队列时,会从队头或者队尾依次淘汰单调队列里,对后续求解答案没有帮助的对象 每个对象一旦弹出,可以结算其参与的答案,随后这
10
0
0
单调栈
摘要:单调栈 经典用法:在数组中当前元素的两侧找第一个比当前元素更大(更小)的数在哪 维持求解答案的可能性 单调栈里的所有对象按照规定好的单调性来组织 当某个对象进入单调栈时,会从栈顶开始依次淘汰单调栈里对后续求解答案没有帮助的对象 每个对象从栈顶弹出时结算当前对象参与的答案,随后这个对象不再参与后续求解
9
0
0
C++刷题小知识点
摘要:数据结构定义 struct ListNode { int val; ListNode *next; ListNode() : val(0), next(nullptr) {} ListNode(int x) : val(x), next(nullptr) {} ListNode(int x, Lis
5
0
0
单调队列
摘要:单调队列 239. 滑动窗口最大值 int *maxSlidingWindow(int *nums, int numsSize, int k, int *returnSize) { *returnSize = numsSize - k + 1; int *res = (int *) malloc(s
32
0
0
滑动窗口
摘要:滑动窗口 209. 长度最小的子数组 int min(int a, int b) { return a > b ? b : a; } int minSubArrayLen(int target, int *nums, int numsSize) { int res = 0x7fffffff; for
17
0
0
构建前缀信息
摘要:构建前缀信息 303. 区域和检索 - 数组不可变 构建前缀和数组,快速计算子数组区间和 class NumArray { public int[] prefixSum; public NumArray(int[] nums) { prefixSum = new int[nums.length +
10
0
0
子数组最大累加和(上)
摘要:子数组最大累加和 53. 最大子数组和 返回子数组最大累加和 返回子数组的开始和结束位置 int max(int a, int b, int c) { int d = a > b ? a : b; return d > c ? d : c; } // 必须经过mid和mid+1 int maxCro
21
0
0
三维动态规划
摘要:三维动态规划 474. 一和零 多维费用背包 int zeros; int ones; int len; void count(char *s) { zeros = 0; ones = 0; int l = strlen(s); for (int i = 0; i < l; ++i) { if (s
36
0
0
二维动态规划(下)
摘要:二维动态规划(下) 115. 不同的子序列 // 自底向上 int numDistinct(char *s, char *t) { const int MOD = 1e9 + 7; int lenS = strlen(s); int lenT = strlen(t); // dp[i][j]表示在s
22
0
0
二维动态规划(上)
摘要:二维动态规划 64. 最小路径和 int min(int a, int b) { return a > b ? b : a; } // 从(0,0)到(i,j)的最小路径和,只能向右或向下移动 int recursive(int **grid, int i, int j) { if (i == 0
29
0
0
最大公约数、同余原理
摘要:最大公约数 // 最大公约数,时间复杂度O((logn)^3) int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); } // 最小公倍数 int lcm(int a, int b) { return a / gcd(a, b) * b
16
0
0
一维动态规划
摘要:一维动态规划 509. 斐波那契数 int *dp; // 自顶向下记忆化搜索,时间复杂度O(n) int recursive(int n) { if (n == 0)return 0; if (n == 1) return 1; // 若之前计算过就直接返回 if (dp[n] != -1) re
28
0
0
Top100(下)
摘要:Top100(下) 栈 20. 有效的括号 bool isValid(char *s) { int len = strlen(s); if (len % 2 == 1) return false; // 符号栈 char *stack = (char *) malloc(sizeof(char) *
6
0
0
C语言刷题小知识点
摘要:力扣返回二维数组 int **spiralMatrix(int m, int n, struct ListNode *head, int *returnSize, int **returnColumnSizes) { // 二级指针模板 int **res = (int **) malloc(siz
14
0
0
Top100(中)
摘要:Top100(中) 二叉树 94. 二叉树的中序遍历 int *res; void inorder(struct TreeNode *root, int *returnSize) { if (root == NULL) return; // 左根右 inorder(root->left, retur
5
0
0
链表中等题(下)
摘要:链表中等题(下) LCR 028. 扁平化多级双向链表 class Solution { public: // 递归 Node *generate(Node *head) { if (head == nullptr) return nullptr; // 把后面的扁平化 Node *next = g
13
0
0
Top100题(上)
摘要:Top100(上) 散列 1. 两数之和 struct MyListNode { int val; int pos; struct MyListNode *next; }; // 散列表 typedef struct { struct MyListNode *data; } MyHashMap; c
9
0
0
链表中等题(上)
摘要:链表中等题(上) 2807. 在链表中插入最大公约数 // 辗转相除 int gcd(int a, int b) { if (a % b == 0) return b; return gcd(b, a % b); } struct ListNode *insertGreatestCommonDivi
23
0
0
前缀和简单题
摘要:前缀和简单题 2574. 左右元素和的差值 int *leftRightDifference(int *nums, int numsSize, int *returnSize) { int *res = (int *) malloc(sizeof(int) * numsSize); *returnS
14
0
0
二分法简单题
摘要:二分法 222. 完全二叉树的节点个数 /* * 完全二叉树编号从1开始 * 如果第k个节点位于第h层,则k的二进制表示包含h+1位, * 其中最高位是1,其余各位从高到低表示从根节点到第k个节点的路径, * 0表示移动到左子节点,1表示移动到右子节点。 * 通过位运算得到第k个节点对应的路径,判断
14
0
0
点击右上角即可分享
微信分享提示
深色
回顶
收起