![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
skywander0
虽千万人吾往矣!
展开
-
阿里 7.27笔试题。
题目大概是这样。有个藏宝架有n层,每层的宝物数量不一,每个宝物都有其价值,现在要求拿出m个宝物,并且需要遵守规则:每次只能拿选定层的两端的宝物要拿出的m个宝物的总价值是各种方案里最大的输入:n是层数,m是挑选的次数。n<=100,m<=10000n m下面每行代表每层,且第一个数是这层宝物的数量k,后面的则是k个宝物的价值 k<=100.4 1 2 4 55 1 2 4 5 5样例:2 32 3 24 1 4 1 5输出:5+3+2=10其实这个样例不好,如果原创 2020-07-28 14:34:40 · 1322 阅读 · 0 评论 -
力扣,990. 等式方程的可满足性,并查集
等式方程的可满足性https://leetcode-cn.com/problems/satisfiability-of-equality-equations/标准的并查集模板,将常用的parent数组形式换成字典形式。####如果我们将所有等式两端,用并查集合并一波,那么只需要查找下,不等式的两端有没有在一个等式的集合里出现过就行了。####整个代码由,find_root,union_xy,find_xy组成,find_root查找每个点的的根,union_xy是合并操作,find_xy用于在.原创 2020-06-20 21:57:39 · 188 阅读 · 0 评论 -
力扣,698. 划分为k个相等的子集,递归+回溯,暴力出奇迹
划分为k个相等的子集https://leetcode-cn.com/problems/partition-to-k-equal-sum-subsets/这题怎么说呢,看到那个len(nums)<16没,这就是叫我们使劲穷举的意思!!!!递归+回溯想法就是首先就是和不够k整除的,直接返回False,其次利用数组中求子集和为target的想法,整个代码也是它的模板的扩充。就按例题来分析,假设k=4,每组的值为5,我们从数组中找出一组数为5的,然后从原始的数组中去掉这组数,在找一组和为5的.原创 2020-06-19 23:53:31 · 430 阅读 · 0 评论 -
力扣,516. 最长回文子序列,动态规划+记忆化回溯
力扣,516. 最长回文子序列https://leetcode-cn.com/problems/longest-palindromic-subsequence/先说下记忆化回溯这个想法比较简单,对于i,j之间最长的回文子序列我们记做f(i,j),显然是有if s[i]==s[j] ,f(i,j)=f(i+1,j-1)+2,else f(i,j)= max(f(i+1,j),f(i,j-1))所以如果按照思路直接写递归的话很简单。####那么问题来了,这样如果不加@lru_cache(None原创 2020-06-19 22:03:06 · 410 阅读 · 1 评论 -
力扣305,岛屿数量,并查集。
岛屿数量 IIhttps://leetcode-cn.com/problems/number-of-islands-ii/主要的想法是用并查集,改一下并查集的代码就好了。假设每个相邻的两个格子之间有条边。整体的代码感觉还能再优化些。####首先将建个m*n长的数组parent,表示每个格子,m*n长的数组rankx用于路径压缩。####寻根的函数若parent[i] = i那么就代表这个i位置就是一个根节点。find_root函数寻找一个节点的根节点。ans ,res= [],0 ####a.原创 2020-06-19 13:51:05 · 404 阅读 · 0 评论 -
力扣刷题,1028. 从先序遍历还原二叉树。递归+回溯
从先序遍历还原二叉树https://leetcode-cn.com/problems/recover-a-tree-from-preorder-traversal/想法挺简单的,先把S处理成pre,和flag两个数组,pre是先序遍历,flag是pre里每个节点的深度。然后就是一个dfs,将pre和flag两个数组传进去,类似于中序后续确定一棵树的算法,从右找到第一level+1的下标记为j,然后从1到j就是左子树,(如果i,j不相等),如果相等就是全部都是左子树,然后就分成了左右两个子树,继续.原创 2020-06-18 15:20:13 · 187 阅读 · 0 评论 -
刷题python,力扣198,213,337三个打家劫舍问题。动态规划
首先先给出题目的地址。https://leetcode-cn.com/problems/house-robber-iii/添加链接描述首先是简单版的打家劫舍,这是题是一维dp,考虑状态方程,dp[i]是到i为止,获取最大的收益,那么dp[i]就等于他这次没偷,第i-1次的最大收益和这次偷了的收益加上第i-2次的最大收益,即dp[i]=max(dp[i-1],dp[i-2]+nums[i]),...原创 2020-04-24 12:31:56 · 227 阅读 · 0 评论 -
最大连续子段和,最大连续m段和。动态规划。
首先是最大连续子段和的问题,题目描述:求一个数组arr=[-2,1,-3,4,-1,2,1,-5,4],的最大连续的子段的和。题解:使用动态规划,定义辅助数组dpc记录以当前元素结尾的最大连续的子段和。即dpc[i]表示的是在arr列表中以arr[i]结尾的最大连续的子段和。那么显然dpc[i]有两种情况,一个是arr[i]加在了arr[i-1]之后,那么此时最大的连续子段和dpc[i] = ...原创 2020-04-13 15:30:52 · 1032 阅读 · 0 评论 -
有依赖的背包问题(华为机试-购物单)。动态规划
今天刷到一道有依赖的背包问题,是牛客的华为机试题,记录下解法。题目如下:王强今天很开心,公司发给N元的年终奖。王强决定把年终奖用于购物,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子:主件 附件电脑 打印机,扫描仪书柜 图书书桌 台灯,文具工作椅 无如果要买归类为附件的物品,必须先买该附件所属的主件。每个主件可以有 0 个、 1 个或 2 个...原创 2020-04-01 13:29:43 · 942 阅读 · 0 评论 -
常见的排序算法总结
常见的排序算法总结1.冒泡排序就像冒泡一样,从头对比相邻的两个,大的(或者小的)就交换到后面,一直到序列有序。时间复杂度最坏,平均O(n^2),最好的时候是初始序列有序,第一趟后就不在发生交换,停止排序时间复杂度O(n)。空间复杂度为O(1)。a = [11,2,41,7,22,80,67,1,0.1,88]def bubble_sorted(a): flag = True ...原创 2020-03-30 10:23:36 · 93 阅读 · 0 评论