- 博客(7)
- 收藏
- 关注
原创 leetcode552--学生出勤记录
题目链接 链接: link. 自己思索的解法 我们观察题目可以容易获悉,学生的出勤记录中不能出现2个A,只能有1个或者没有A。所以分情况讨论, 当学生出勤记录没有A时,只存在P和L,且L不能连续出现3个,这就可以用动态规划的思想求解,每天有3个状态,L0(P),L1(这一天迟到了),L2(连续迟到两天了),很容易写出转移方程并求解。 当学生出勤记录只有一个A时,我们可以假设A出现在位置i,且将出勤记录分割成前后两个子出勤记录, 这两个子出勤记录时无关的,而且在第一种情况求解的过程中计算出来了,只需要将前后
2021-08-18 12:26:56
119
原创 leetcode310--最小高度树
这道题需要用拓扑排序的思想做。我们可以把树想象成图,图想象成一层一层的圆,第一层是出度为1的节点,很容易知道,这些点并不是我们要找的最小高度节点(因为连接的那个点高度肯定小于等于他)。我们先把初始图初度为1的点加入队列,然后用BFS算法,依次把点和边删除,如果删除边之后出现出度为1的点再加入队列中,直到队列中的点与剩余未访问点的个数相同,这些点就是最后答案的点。 // 拓扑排序 class Solution { public: vector<int> findMinHeightTrees
2021-03-04 12:06:41
173
1
原创 Leetcode-77组合
这道题目一般的递归方法就不说了,比较有意思的算法是利用二进制的思想来做,记录一下。 基本思路就是从小到大寻找n位中有k个1,n-k个0的二进制数。从开始的位置找最近的连续1序列,将最高位1和最高位前面一位置换,然后把其他1全部搬移到最低位。 算法用一个数组实现,找到第一个a[j] +1!=a[j+1]的位置,说明此时出现断裂,将a[j]++,把[0,j-1]位置的数换位j+1,相当于搬移1到最低位。 class Solution { public: vector<int> temp;
2021-02-28 19:41:19
98
原创 无重叠区间
这道题本身没啥好说的,但是提交后发现自己的用时和内存排名都很低,但只更改了一个地方,排名迅速地上升, [](vector a, vector b) 更换成了[](const auto& a, const auto& b),具体原理等学到C++的时候再补充。 class Solution { public: int eraseOverlapIntervals(vector<vector<int>>& intervals) { if(inte
2021-01-30 14:43:26
116
原创 leetcode135 分发糖果
这是一个贪心算法的经典题目,一开始我时找到最小值,然后向两边增加糖果的数量,后来发现这样做有问题。应该采取双向遍历,一次遍历保证右>左,另一次遍历保证左>右 class Solution { public: int candy(vector<int>& rate) { int size = rate.size(); if(size < 2) return size; vector<in
2021-01-29 15:20:28
72
原创 CSAPP datalab详解
CSAPP第一章实验详解bitXor(x,y)tmin()isTmax(x)allOddBits(x)negateisAsciiDigitSmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 bitXor(x,y
2020-12-14 23:44:49
3680
原创 数组在栈上的分配
数组在栈上的分配 gcc分配数组内存 创建了一个长度为N的字节数组,C编译器的在栈上的空间分配很有意思 处理器总是以16字节为单位分配栈空间 比如当数组长度为2字节时,处理器会分配16字节的空间,但是当数组长度为9字节时,处理器直接分配了32字节,当数组长度为25字节时,处理器会分配48字节。 可以发现一个规律,当数组的字节长度 > 16k -8时,处理器会分配(k+1)*16的空间 如果再声明一个数组,整数等,处理器继续按16字节分配内存,且都是先分配数组再分配普通变量 mov %fs
2020-11-24 15:00:01
2108
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人