随笔分类 -  lc练习

摘要:枚举子数组问题,常见有固定一个点,枚举另一个端点,还有枚举中间点。 本题使用双指针算法,对右端点进行枚举,每次累加[l, r]区间内,所有以右端点为结尾的子数组对答案的贡献度,也就是长度 r- l + 1 class Solution: def countSubarrays(self, nums: 阅读全文
posted @ 2023-12-03 09:56 深渊之巅 阅读(7) 评论(0) 推荐(0) 编辑
摘要:题目不难,但是涉及到的知识点很丰富。 细节: 左右两侧同时找小于,会重复计数,同时小于等于又会少算。 加个限制,左侧找小于等于,右侧找小于,就可解决。 详细分析:https://leetcode.cn/problems/sum-of-subarray-minimums/solutions/25446 阅读全文
posted @ 2023-11-27 17:15 深渊之巅 阅读(12) 评论(0) 推荐(0) 编辑
摘要:对于一个整数来说其为一个合法数字前提是没有前导0 对于一个小数可以分解一下其整数部分和小数部分,整数部分和上条一致,小数部分末尾不能为0 对于本题: 我们可以先枚举逗号的位置,在对于左右两边枚举小数点的位置然后将两边拼起来就行。 def findSplit(s: str) -> List[str]: 阅读全文
posted @ 2023-11-03 17:17 深渊之巅 阅读(10) 评论(0) 推荐(0) 编辑
摘要:首先本题可以抽象为从原数组中选出一些子数组,并让这些子数组的(i) * a[i]的和最大 解法: 将原数组从大到小排序 f[i] = i * a1 + (i-1) * a2 + ... f[i-1] = (i-1) * a1 + (i-2)*a2 + ... f[i] = f[i - 1] + (a 阅读全文
posted @ 2023-10-22 08:42 深渊之巅 阅读(6) 评论(0) 推荐(0) 编辑
摘要:本题要快速找到某个数字在数组中左边<=它的数的最小下标。 可以建立一个权值线段树,nums[i]处维护最小下标。 class Solution { public: const static int N = 50010, INF = 0x3f3f3f3f; struct Node { int l, r 阅读全文
posted @ 2023-10-19 17:44 深渊之巅 阅读(6) 评论(0) 推荐(0) 编辑
摘要:本题我们要快速的判断一个点在拓扑序中是不是另一个点的前驱,先求出拓扑序,在利用二进制代表集合来进行前驱的判断。 class Solution { public: const static int N = 110, M = N * N; int h[N], e[M], ne[M], idx; int 阅读全文
posted @ 2023-09-13 09:56 深渊之巅 阅读(10) 评论(0) 推荐(0) 编辑
摘要:本题是简单的模拟,但是对于多维数据的表示(x, y)本题更想探究一下array和tuple之间的区别。 array版本 class Solution { public: bool checkValidGrid(vector<vector<int>>& grid) { if(grid[0][0]) r 阅读全文
posted @ 2023-09-13 09:53 深渊之巅 阅读(7) 评论(0) 推荐(0) 编辑
摘要:经典拓扑排序的应用,用拓扑排序的算法看看原图中是否有一个合法的拓扑序。 class Solution { public: const static int N = 2010, M = 5010; int h[N], e[M], ne[M], idx; int d[N], q[N]; void add 阅读全文
posted @ 2023-09-09 10:13 深渊之巅 阅读(6) 评论(0) 推荐(0) 编辑
摘要:我们用栈同时维护当前字符串和倍数以及要加倍的字符串 当遇到"["时,我们保存当前字符串,即将当前字符 cres 串入栈; 当遇到"]"时,res = cres + 倍数 * 应加倍的字符串 class Solution: def decodeString(self, s: str) -> str: 阅读全文
posted @ 2023-09-05 13:14 深渊之巅 阅读(7) 评论(0) 推荐(0) 编辑
摘要:1654. 到家的最少跳跃次数 本题目是经典bfs, 我们在进行广搜的时候,不仅要记录某个点是否走过,当前位置和步数,还要记录上一次是否是向后走,来决定此时是否能向后走。 由于广搜有最短的性质,所以某个点只能入队一次。 以往在记录多维信息时候,常用pair嵌套与结构体,有点不方便;从本题题解中学到了 阅读全文
posted @ 2023-08-30 17:59 深渊之巅 阅读(25) 评论(0) 推荐(0) 编辑
摘要:字符串处理:动态规划,双指针,栈,计数,字符串流 本题要将一个格式化的字符串容器作为答案,可利用双指针和stringstream来进行操作 class Solution { public: vector<string> summaryRanges(vector<int>& nums) { int n 阅读全文
posted @ 2023-08-26 13:34 深渊之巅 阅读(4) 评论(0) 推荐(0) 编辑
摘要:记忆化搜索:dfs dfs框架为:1、结束条件 2、扩展状态(枚举可能情况) 3、返回结果 数位dp通常使用dfs来实现 二进制代表状态: 0代表不在集合中,1代表在集合中。 判断第k个元素是否在集合中: mask & (1 << k) 是否为1 将第k个元素加入到集合中: mask | (1 << 阅读全文
posted @ 2023-08-25 10:17 深渊之巅 阅读(211) 评论(0) 推荐(0) 编辑
摘要:给两种不同元素,可以和第三种元素交换位置,L只能向左走,R只能向右走,问start数组可否经过某些变换变换到end。 经典双指针算法。 class Solution { public: bool canTransform(string start, string end) { int n = sta 阅读全文
posted @ 2023-08-21 09:33 深渊之巅 阅读(8) 评论(0) 推荐(0) 编辑
摘要:本题我们采用 class Solution { public: string reverseWords(string s) { stack<string> stk; int n = s.size(), l = 0, r = n - 1; //trim函数 while(l < n && s[l] == 阅读全文
posted @ 2023-08-16 14:19 深渊之巅 阅读(8) 评论(0) 推荐(0) 编辑
摘要:一般的删除问题,可以直接删除(找符合条件的,找到了直接删掉),延迟删除(打标记,找完了再删除),栈,双指针 在链表中删除一个节点,要找到其前面一个节点cur, 然后 cur -> next = cur -> next -> next即可 方法一:直接删除 我们先算出链表长度len,要删除倒第n个节点 阅读全文
posted @ 2023-08-15 21:44 深渊之巅 阅读(8) 评论(0) 推荐(0) 编辑
摘要:所谓延迟改变,可以是在应该改变的地方打一个标记,等把所有应该改变的地方都找到后,再进行操作。 class Solution { public: string findReplaceString(string s, vector<int>& indices, vector<string>& sourc 阅读全文
posted @ 2023-08-15 08:37 深渊之巅 阅读(13) 评论(0) 推荐(0) 编辑
摘要:题目大意:给一个邻接矩阵,问改变一个点后,最大连通块多大 对于这种连通块相关问题,一般的思路就是进行深搜和并查集,这里采用并查集维护连通块大小解法。 首先先初始化并查集,并进行连通块的合并;再对图中的0进行枚举,找到最大的连通块即可。 对(n * m)的二维点阵图常用技巧,二维转一维:点(i, j) 阅读全文
posted @ 2023-08-10 20:18 深渊之巅 阅读(14) 评论(0) 推荐(0) 编辑
摘要:方法一:双向广搜 class Solution { public: int ladderLength(string beginWord, string endWord, vector<string>& wordList) { set<string> se; for(auto it : wordLis 阅读全文
posted @ 2023-08-09 09:07 深渊之巅 阅读(6) 评论(0) 推荐(0) 编辑
摘要:本题让我们求不相交路径数目 方法1:递归/回溯 dfs(x, y, left) 表示从点x, y出发,还剩下left个可行走点的路径数目。 每行走到一个新的点就将该点设置为-1, 避免重复搜索。 当走到终点时,如果left == 0 则答案 + 1 class Solution { int dfs( 阅读全文
posted @ 2023-08-04 09:28 深渊之巅 阅读(12) 评论(0) 推荐(0) 编辑
摘要:启发式搜索 class Solution { struct Node { string str; int x, y; int val; }; int n = 2, m = 3; string e = "123450"; int dx[4] = {-1, 0, 1, 0}; int dy[4] = { 阅读全文
posted @ 2023-07-21 11:26 深渊之巅 阅读(19) 评论(0) 推荐(0) 编辑