牛客网刷题
文章平均质量分 67
在刷算法题的过程中一些比较有意思的题的记录。
WenbinYao&YouweiHu
两个人一起坚持、学习、进步
展开
-
【dp】编辑距离
今天刷题刷到这题一点思路都没有,看了题解后在此记录下。首先,明确这题可以用dp求解,满足dp的三特征一模型。问题的求解是多阶段最优决策问题,1.问题存在最优子结构,后阶段的解可以用前面阶段的解推出来;2.重复子问题,前面阶段解会多次被使用;3.无后效性问题,前面阶段的解与后面阶段无关。dp的关键无疑是找到状态转移方程,而找到状态转移方程的关键是要定义好各阶段的状态是什么。该题的状态其实还是容易想到的,定义dp[i][j]为str1到第i个字符为止,str2到第j个字符为止的编辑距离,此题难在定义好.原创 2022-04-13 11:51:38 · 348 阅读 · 0 评论 -
动态规划刷题记录
DP一直是我的一个薄弱项,最近开始准备刷DP了,在此记录下DP的刷题记录,比较新的怪的题目可能会单独写一篇博客,比较传统的就统一记录在这一篇博客里了。首先最简单的无疑是直接根据递推式去递归,但是递归时间复杂度和空间复杂度都很高,所以改用更好的方法,也就是DP。看了下题解,有一个总结的很好,在此记录:DP适用的题目:一个模型三个特征一个模型:多阶段最优决策模型三个特征:最优子结构:后面阶段的最优解可以通过前面阶段的最优解解出;无后效性:前面阶段的最优解不受后面阶段的影响;重复子问题:解后面原创 2022-04-03 13:43:58 · 649 阅读 · 0 评论 -
数组中只出现一次的两个数字
今天碰到的题相对较难,即使看了题解依然花了较长时间才解出,在此记录,同时复习一下python的位运算。该题的解题流程如下:遍历一遍数组,然后对数组中每个值都进行异或操作,相同的两个元素异或后全部变成了0,因此实际上数组的每个值异或后就是两个不同的元素进行异或的结果。两个不同的值异或的结果有一个特殊的地方需要掌握,将这两个不同的值A,B都转化为二进制,比如1101,1111,他们异或后就变成了0010,也就是只有不同的位是1,其他都是0,当然异或后可能有多个位是1。遍历求解出step 1结果中最低位.原创 2022-04-02 12:12:45 · 966 阅读 · 0 评论 -
合并k个已排序列表
这个题我的解题思路是:初始化k个指针,形成一个指针列表,这个指针列表用来存放还未排序的各个链表的head;初始化一个cur指针,这个指针用来存放目前已排序好的链表的表尾;每次在指针列表中找到val最小的那个指针,然后把cur移到那个指针上,同时该指针后移。代码如下:class ListNode: def __init__(self, x): self.val = x self.next = None## 代码中的类名、方法名、参数名已经指定,请勿修.原创 2022-03-23 10:46:59 · 1634 阅读 · 0 评论