随笔分类 - 每周算法练习
摘要:"题目" 题意: 给你三个字符串s1,s2,s3 问你s3是否由s1和s2互相交叉组成。也就是说s3中的某个子序列是s1,剩下的字符串组成s2。 第一眼感觉是最长公共子序列,一开始的想法是先把s3和s1求最长公共子序列,然后从s3的部分中把s1抠出来,在再和s2求最长公共子序列。 但是这种做法很麻烦
阅读全文
摘要:"题目" 第一发超时了,可以用一个数组表示状态,所有相等长度的区间,它的BST数目是一样的。
阅读全文
摘要:"题目" DFS,
阅读全文
摘要:"题目"
阅读全文
摘要:"题目"
阅读全文
摘要:"题目" 非常简单的BFS 暴搜
阅读全文
摘要:"题目"
阅读全文
摘要:"题目"
阅读全文
摘要:"LeetCode Contest 166" 第一次知道LeetCode 也有比赛。 很久没有打过这种线上的比赛,很激动。 直接写题解吧 "第一题" 很弱智 "第二题" 也很简单的,我先排个序。 但是在用c++的快排的时候,被坑了,我一直的习惯是写自定义比较函数,没有写运算符重载,不知道为什么一直R
阅读全文
摘要:"题目" 格雷码 000 001 011 010 110 111 101 就是相邻的两个码之间只变动一个bit, 格雷码的构造方法可以递推得到,它是一个有规律的序列。 具体n的格雷码,可以由n 1得到,方法就是如下图所示,摘自维基百科 当然也有通项公式,用位运算写起来,也巨简单,虽然不知道为什么:
阅读全文
摘要:"题目" 一开始我读错了题意,以为是二分, 结果却是动态规划的区间DP 我都状态数组是dp[i1][j1][i2][j2],表示第一个字符串的i1到j1区间和第二个字符串的i2到j2区间,是符合条件,是可以旋转转换的。 string最大的长度也不过50多个吧。 所以险过。 状态转移方程,很简单啦,将
阅读全文
摘要:"题目" 此题目动态规划可以解 在矩阵上一层一层递推。 dp[i][j]表示当前层,从i到j 可以形成矩形的最大面积。 需要有两个DP数组,dp[i][j] 和dp2[i][j] , 在递推的过程相互轮换。dp[i][j]表示上一层的状态数组,dp2[i][j]表示当前层的状态数组 状态转移方程是
阅读全文
摘要:"题目" 单调栈。 如果用O(n^2)的算法,必定超时。 所以我们可以用单调栈,来实现O(n)效率的算法。 单调栈是递增的,每个长方形入栈时,都和栈顶的长方形高度对比,如果大于,则入栈。如果小于则按照高度合并长方形,直到比它高度小的元素,然后再进栈。 最后挨个出栈。 而出栈的过程才是真正计算长方形面
阅读全文
摘要:"题目" c++
阅读全文
摘要:"题目" c++
阅读全文
摘要:"题目" 在一个旋转数组里,进行二分。但是会有重复的元素。 二分的关键在于判断当前的中点 mid 是在数组旋转点的左边还是右边,当有重复的元素的时候,当 的时候,是判断不出来的,只能递归了,左边右边都走一下。
阅读全文
摘要:"题目"
阅读全文
浙公网安备 33010602011771号