数据结构及算法
文章平均质量分 72
数据结构算法,刷起来
Weiyaner
希望在搜索,推荐,NLP领域持续学习,持续产出。
《鸡声茅店月,人迹板桥霜》
展开
-
《LC刷题总结》——动态规划
通过上述知道,s1必然是个整数,所以如果taget+sum是个奇数,则不存在组合,返回0。发现如果遍历到第i、个分隔字符,如果dp[j-len(i)]为真的话,且这部分也在字分隔典中,那么dpj也为真。把a看作背包容量,数组的数字看作价值和重量,如果对于a的背包恰好存在最大价值是a的,则可以构成。对于ij相等,不一定要求i+1,j-1是回文串,而是里面的回文子序列长度+2即可。如果i,j不相等,那么就等于上一位置的状态,也就是i+1,j和i,j-1的最大值。基于此,遍历顺序i要从后往前,j从i到后。...原创 2022-08-31 12:20:36 · 989 阅读 · 0 评论 -
《LC刷题总结》——回溯
其中,关于循环体,由于限制的不同,循环的方式也不同。原创 2022-08-14 17:35:17 · 246 阅读 · 0 评论 -
《LC刷题总结》——贪心
贪心思路,每更新一次index,都计算一次最大的覆盖范围,这个cover可能没变化,也可能是index+nums[i]的值。看cover是否能到最后一个数字。考虑贪心的思路,可以计算相邻两天买卖的利润,然后取所有的正利润即可。可以无限次的买卖股票,获取的最大利润。同一天可以买卖各一次。如果能实现每一阶段局部最优,就可以拓展到全局,得到最优解。数组中的每个元素代表你在该位置可以跳跃的最大长度。贪心解法没有固定的模板。判断你是否能够到达最后一个下标。...原创 2022-08-08 22:56:10 · 701 阅读 · 0 评论 -
《LC刷题总结》—— 二叉树
代码随想录二叉树总结。原创 2022-08-08 20:23:27 · 264 阅读 · 0 评论 -
leetcode295 一道题认识大顶堆和小顶堆
LC295:数据流的中位数简单来说就是计算中位数。这里采用大顶堆和小顶堆来分别存储中位数的两边。堆排序(Heap Sort)是利用堆这种数据结构所设计的一种排序算法。堆排序先按从上到下、从左到右的顺序将待排序列表中的元素构造成一棵完全二叉树,然后对完全二叉树进行调整,使其满足:构建出堆后,将堆顶与堆尾进行交换,然后将堆尾从堆中取出来,取出来的数据就是最大(或最小)的数据。重复构建堆并将堆顶和堆尾进行交换,取出堆尾的数据,直到堆中的数据全部被取出,列表排序完成。堆结构分为大顶堆和小顶堆:大顶堆:每个节点(叶节原创 2022-07-11 01:03:56 · 2904 阅读 · 0 评论 -
ACM模式下链表、二叉树的输入Python实现
ACM模式,通过数组生成二叉树原创 2022-04-24 14:04:46 · 4764 阅读 · 2 评论 -
二叉树前中后层序遍历的总结对比
二叉树结构的定义: # Definition for a binary tree node. class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right对于以上二叉树,其四种遍历顺序分别是:中序(左中右):7-2-1-8-4-3-5前序(中左右):1-2-7-原创 2022-04-07 16:57:16 · 441 阅读 · 0 评论 -
通俗易懂理解维特比算法
这篇回答你绝对看得懂!如下图,假如你从S和E之间找一条最短的路径,除了遍历完所有路径,还有什么更好的方法?viterbi维特比算法解决的是篱笆型的图的最短路径问题,图的节点按列组织,每列的节点数量可以不一样,每一列的节点只能和相邻列的节点相连,不能跨列相连,节点之间有着不同的距离,距离的值就不在图上一一标注出来了,大家自行脑补答案:viterbi (维特比)算法。过程非常简单:为了找出S到E之间的最短路径,我们先从S开始从左到右一列一列地来看。首先起点是S,从S到A列的路径有三种可能:S-A1、S-A2、转载 2021-11-16 21:26:43 · 216 阅读 · 0 评论 -
位运算(以leetcode两数相除题为例)
位运算介绍位运算符介绍举例说明<<左移运算符,十进制数据向左移动,空缺位补00010(2)<<1得到0100(4)b<<a:b*2a2^a2a>>右移运算符,十进制数据向右移动,空缺位补0,或者10010(2)>>1得到0001(1)b>>a:b/2a2^a2a题目:给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返原创 2021-09-29 10:30:15 · 145 阅读 · 0 评论 -
python 链表的写入、打印和翻转
本文包括三部分,分别是:文章目录写入链表定义ListNode类:小范围逐个写入list转链表打印链表翻转链表递归算法写入链表定义ListNode类:class ListNode(): def __init__(self, val = 0, next = None): self.val = val self.next = next小范围逐个写入# 定义节点的valhead = ListNode(1)p1 = ListNode(2)p2 = ListNode(3)p3 = ListN原创 2021-07-07 18:22:24 · 362 阅读 · 0 评论