- 博客(23)
- 收藏
- 关注
原创 LeetCode 739. 每日温度
但我下面这个做法好像也可以,而且好像还挺快。就是反向遍历,然后根据第i+1个元素的值以及第i+1个元素的答案的值来确定当前的答案。但是单调栈显然才是考点,更通用一些。
2024-03-19 15:56:57
300
原创 LeetCode 394. 字符串解码
递归地识别这个模式:数字[子模式]...;但注意,数字可能没有,当没有数字的时候中括号也没有,出现这种情况的时候直接将这部分加入结果中,然后继续识别上面的模式。394. 字符串解码。
2024-03-19 15:02:33
161
原创 LeetCode 279. 完全平方数
用记忆化递归结果超时了。看了一下题解发现其实上式的i完全可以只考虑是完全平方数的情况。我还是用的记忆化递归,因为个人感觉记忆化递归比动态规划更通用一些,而且写起来更简单,虽然效率可能会差一些。279. 完全平方数。
2024-03-19 14:18:27
344
1
原创 LeetCode 2684. 矩阵中移动的最大次数
这题刚看到想到的就是用深度优先遍历来做,结果超时了。仔细一看发现在移动单元格的时候永远都是向下的,也就是说不可能走到已经走过的单元格上。那么我们就可以给深度优先搜索加上一个备忘录,记录已经求解的子问题。此外甚至可以用动态规划来求解。下面是带备忘录的递归(记忆化递归)的求解方法。2684. 矩阵中移动的最大次数。
2024-03-16 11:38:54
470
原创 LeetCode 437. 路径总和 III
简而言之就是深度优先遍历过程中记录每个前缀和出现的个数,如果当前和减去target的值等于某个前缀和,那么这两个节点之间的和为target。节点访问完毕记得要回溯。又是一个将连续的和转化为两个前缀和相减的题目,可以参考。
2024-03-14 11:12:30
145
原创 LeetCode 记录两个关于前缀的数组题
优化:对于每个元素之前和之后的最小元素,我们可以以O(N)的时间先求出来,保存为前缀和后缀数组,数组中记录了该下标的前缀中的最小元素和后缀中的最小元素。把连续元素的和转化成了两个前缀和相减:遍历过程中,如果当前下标的前缀和减去k的值等于之前的某个下标前缀和,说明这两个下标之间的部分的和等于k。这题如果暴力的话就是,遍历过程中,对每个元素求前缀中最小的元素,求后缀中最小的元素,然后加起来。最后选一个最小的和即可。
2024-03-14 10:37:34
207
原创 LeetCode 2789. 合并后数组中的最大元素
这题如果正向遍历就会很乱,因为前面的元素合并之后值增加了,可能会变得比后面的元素更大,这样就会影响到后面的合并,因此这样的合并是有后效性的。所以可以选择反向合并,后面的元素合并之后值只会变大,并不会影响前面元素的合并。给一个粗糙的代码,这个long long数组应该还能优化,但也能过。
2024-03-14 10:12:35
139
原创 LeetCode 146. LRU 缓存
存和取都需要O(1),原本可以用哈希表实现,但是题目还有个条件,在容量超过capacity的时候删掉最久不用的元素,因此增加一个双向链表,在数据被get和put的时候均将对应的元素移动到表尾。这样越靠近表尾越近被使用过,每次需要删除最久未使用的就删掉表头的元素即可。
2024-03-12 17:05:59
190
原创 Beam Search源码理解
本文的beam search源码来自:CodeBERT/model.py at master · microsoft/CodeBERT (github.com)https://github.com/microsoft/CodeBERT/blob/master/CodeBERT/code2nl/model.py理解过程中加入了注释:class Beam(object): def __init__(self, size,sos,eos): self.size = size
2022-04-19 14:27:18
652
1
原创 PAT (Basic Level) Practice 1017 A除以B
题目详情 (pintia.cn)https://pintia.cn/problem-sets/994805260223102976/problems/994805305181847552模拟手动除法运算过程:#include <iostream>using namespace std;int main(){ string a; int b; cin >> a >> b; int mod = 0; for (int i=0
2021-09-16 13:46:05
80
原创 PAT (Basic Level) Practice 1015 德才论
题目详情 (pintia.cn)https://pintia.cn/problem-sets/994805260223102976/problems/994805307551629312#include <iostream>#include <algorithm>#include <vector>using namespace std;typedef struct student{ int ID, morality, ability;} stud
2021-09-15 23:41:19
108
原创 PAT (Basic Level) Practice 1013 数素数
题目:题目详情 (pintia.cn)https://pintia.cn/problem-sets/994805260223102976/problems/994805309963354112埃筛:#include <iostream>#include <memory.h>#include <vector>#define MaxSize 110000using namespace std;int main(){ bool primes[Ma
2021-09-15 13:08:29
115
原创 PAT (Advanced Level) Practice 1003 Emergency
菜鸡一枚,第一次写这种题,写了好久。题目如下。题目详情 (pintia.cn)https://pintia.cn/problem-sets/994805342720868352/problems/994805523835109376贴代码。#include <iostream>#include <vector>#define INT_MAX 0x7fffffffusing namespace std;int main(){ //输入 int n,
2021-09-14 17:38:04
157
原创 Functional Code Clone Detection with Syntax and Semantics Fusion Learning论文总结
一、任务简介代码克隆就是指源码中两段代码非常相似的现象。代码克隆检测有四个层次: 1.代码语句完全相同; 2.在1的基础上改变一些变量名、类型名或者是函数名; 3.在2的基础上增加或者减少一些语句; 4.功能相似,代码语句有很大差别。一般有四种类型检测方法,基于文本和基于记号的方法一般用于对1.2类型的检测,基于语法的方法一般可以用于对1.2.3类型的检测以及部分4类型的检测。基于语义的...
2021-08-27 18:26:08
932
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人