11 2023 档案
摘要:题目不难,但是涉及到的知识点很丰富。 细节: 左右两侧同时找小于,会重复计数,同时小于等于又会少算。 加个限制,左侧找小于等于,右侧找小于,就可解决。 详细分析:https://leetcode.cn/problems/sum-of-subarray-minimums/solutions/25446
阅读全文
摘要:简单模拟即可: class Solution { public: vector<int> findWordsContaining(vector<string>& words, char x) { int n = words.size(); vector<int> res; for(int i = 0
阅读全文
摘要:flash闪存,可以一种可编程式存储器 flash结构体定义 typedef struct { __IO uint32_t ACR; /*!< FLASH access control register, Address offset: 0x00 */ 访存控制器 __IO uint32_t PDK
阅读全文
摘要:dfs 深度优先搜索:一条路走到黑 基本模型: Returntype dfs(参数) { 判断边界(返回) 扩展状态 dfs下一步 返回} dfs + 记忆返回值 = 记忆化搜索 class Solution { public: int minPathCost(vector<vector<int>>
阅读全文
摘要:#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<climits> using namespace std; typedef long long LL; const int N = 5
阅读全文
摘要:tire树用来快速查找一组字符串。 算法流程 int son[N][26], cnt[N], idx; char str[N]; // 插入和删除类似,每次从根节点入场,采用计数方法,0表示没有此节点,1表示存在节点。 void insert(char* str) { int p = 0; for(
阅读全文
摘要:计数的思想,源自于计数排序。 计数就是把出现过的元素个数进行记录。在集合相关操作中,计数+1表示加入元素,计数-1表示删除元素。 我们在操作过程中,有时要对某些变量进行记录,记录出现的位置,记录上一次的值都是计数的思想。 本题我们采用计数的思想,记录每个字母出现的次数。s的长度为n。出现最多次字母的
阅读全文
摘要:归并算法: 递归+合并,在递归的途中进行分治。递归会把区间越分越小,此时就可以进行分治操作。 可以使用全局变量进行分治操作。 可以在函数中进行分治操作,在递归树中实现pushup和pushdown,记性父节点与子节点的关系计算。 class Solution { public: struct Nod
阅读全文
摘要:class Solution: def findMinimumOperations(self, s1: str, s2: str, s3: str) -> int: cnt = 0 for a, b, c in zip(s1, s2, s3): if not a == b == c: break c
阅读全文
摘要:分块是一种暴力做法的优化。 基本思想是把要操作的对象分为根号n份,然后按份进行操作。 模板题: #include<bits/stdc++.h> using namespace std; typedef long long LL; const int N = 1e5 + 10; struct Node
阅读全文
摘要:跳表RMQ算法 求解静态区间最值的一种算法。 f[i][j] 表示 从i出发,长度为2^j这一段区间的最大值。 初始化和递推: void init() { for(int j = 0; j < M; j ++ ) { for(int i = 1; i + (1 << j) - 1 <= n; i +
阅读全文
摘要:离散化算法常用来解决负值问题和取值范围过大问题。 模板: 使用lower_bound或者库函数set,map来写 写法1.lower_bound速度快 // 把要进行离散化的值排序去重后放入alls数组中,用二分进行映射。int find(int x) { return lower_bound(al
阅读全文
摘要:单调栈本质: 及时去掉无用数据, 保证栈中数据有序。 单调栈的思考方法,假设我们要找寻右侧第一个大于当前数字的数,就要将<=当前数的元素出栈。 当拿到一个问题时,要大的,剔除小的;要小的,剔除大的。 模板题: class Solution: def dailyTemperatures(self, t
阅读全文
摘要:本题我们采用隔板法+容斥原理来解决 合格总方案数 = 总方案书 - 不合理的方案数 = 不考虑limit的方案数 - 不合法方案数(至少有一个小朋友 > limit) 任意方案数 n个小球放到3个盒子中 -> n + 2个位置,选两个位置放隔板剩下位置放球 c(n + 2, 2) 三个小朋友为:甲乙
阅读全文
摘要:#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N = 1010; int n, m; int v[N], w[N]; int f[101
阅读全文
摘要:class Solution { public: vector<string> findHighAccessEmployees(vector<vector<string>>& access_times) { int n = access_times.size(); vector<string> re
阅读全文
摘要:计算积分: \[\int_0^{+\infty}\frac{e^{-ax} - e^{-bx}}{x}dx \]
阅读全文
摘要:计算如下积分 \[\int\frac{\sqrt{x + 1} + 2}{(x + 1)^2 - \sqrt{x + 1}} \]
阅读全文
摘要:算法原理: 将一个字符串看成是一个P 进制的数字。 代码模板: # python def __init__(self, s): n = len(s) self.BASE = BASE = 131 # 进制 131,131313 self.MOD = MOD = 10 ** 13 + 7 # 10**
阅读全文
摘要:对于一个整数来说其为一个合法数字前提是没有前导0 对于一个小数可以分解一下其整数部分和小数部分,整数部分和上条一致,小数部分末尾不能为0 对于本题: 我们可以先枚举逗号的位置,在对于左右两边枚举小数点的位置然后将两边拼起来就行。 def findSplit(s: str) -> List[str]:
阅读全文
摘要:本题可以发现一些枚举的技巧,在枚举多个值的时候,自己有时候脑袋晕晕的,会把变量的更新顺序搞混,此时,可以用依赖树来解决。 如同本题: class Solution: def maximumTripletValue(self, nums: List[int]) -> int: res = pre_ma
阅读全文