算法
文章平均质量分 90
刷题复盘
看到请催我学习
这个作者很懒,什么都没留下…
展开
-
打家劫舍总结
近期刷了几道打家劫舍的题,趁还没忘赶紧把复盘写一下这个是我们的原型题,其他的题目都是在这个题目的基础上延展开来的题目就是说有一堆房屋,每个房屋都有一定的金钱数,我们不能偷相邻的房屋,求能获得的最大金额首先第一个坑就是分清楚问题是贪心还是动规,有些同学做着做着很容易就把他当成了贪心,实际上并不是这样的,我们可以从一号房间出发(下标0)也可以从二号房间(下标1)出发,两种情况选出最大者而不是单纯的局部最优,就像上图的示例一一样,局部最优(2)不一定得到的是全局最优的结果明确了问题类型是dp之后就好办了,使用我们原创 2023-12-15 16:12:55 · 1574 阅读 · 0 评论 -
动态规划背包问题总结
我们可以问问gpt,gpt给出这样的解释:背包问题的描述是:给定一系列物品的重量和价值,以及一个背包的容量,如何选择物品,使得装入背包的物品总价值最大,且背包内物品总重量不能超过背包容量。给定n个物品,每个物品i有一个重量w和一个价值v给定一个背包的容量S目标是选择某些物品,使得这些物品的总重量不超过S,且这些物品的总价值最大解决这个问题需要考虑每个物品是否选择的所有可能组合,然后计算每个组合的总价值。由于组合数目太多,直接枚举是不可行的。原创 2023-11-27 11:56:06 · 1501 阅读 · 0 评论 -
leetcode 每日一题复盘(线性dp)
实际上dp代表的是到达某一层的最低花费,而i则是层数,上面就是对i的代表不明确导致的,正确的推导公式应该是dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]),选择从i-1层和i-2层到达i层两者的最小值。一开始写的递推公式是dp[i]=dp[i-1]+min(cost[i-2],cost[i-1]),写出了一个类似贪心算法的东西,归根结底还是对dp状态的认识不过,不清楚i代表什么,dp代表什么。原创 2023-11-21 10:06:15 · 210 阅读 · 0 评论 -
leetcode每日一题复盘(动态规划)
小的排在前面,用其他区间的开始下标和结束下标进行比较,如果开始下标小于结束下标,说明两个区间重叠,当开始下标大于等于结束下标时说明有新的非重叠区间,数量+1。本题和射气球最小箭数大同小异,但是这一题没做出来,难就难在题目如何理解:移除区间最小数量,使剩下的区间不重叠。,结束下标小的排在前面,用结束下标和开始下标进行比较,如果结束下标大于开始下标说明区间重叠,那么本质上就是求最少有多少个重叠区间,把重叠区间去掉剩下的区间即不重叠。两种方法大同小异,比较的方法都相同,不同在于排序的方法和统计的目标。原创 2023-11-13 18:01:31 · 397 阅读 · 2 评论 -
leetcode每日一题复盘(回溯,贪心)
回溯算法的最后一种问题:棋盘问题,前面的N皇后也是棋盘问题,只不过N皇后只需要一层放一个数据,数独需要多次放入数据且保证数据不冲突。方法是通过bool返回值进行多次递归,每次递归放入一个数据,将该层数据填满后换下一层。原创 2023-11-06 11:57:51 · 163 阅读 · 0 评论 -
leetcode每日一题复盘(回溯)
这里我们讲一下抽象的概念方便理解,工作指针i可以看作我们划的那条线,i前面的可以看作这一次需要判断的数据,如果符合要求则继续递归,不符合要求则进行横向遍历,以此保证每一段ip地址都是合法的,i后面的则是我们下一次需要遍历的数据,即startindex=i+1;感觉理清楚了思路还是比较好写的,难就难在你判断函数代码怎么写好,能不能想到先处理前三段再处理第四段,能不能想到直接在原数据上面操作,这些就是需要我们思考的地方,做题量和思考缺一不可。原创 2023-10-30 17:23:34 · 221 阅读 · 0 评论 -
leetcode每日一题复盘(二叉搜索树,回溯)
这种情况需要把右子树的第一个节点的位置顶上到原来节点root的位置,而左子树应该接在右子树的最左边,返回右子树的第一个节点。这种情况把要删除节点直接赋值成他的右子树即可,相当于删除了root节点,也可以直接返回右子树。如果递归是有返回值的(非bool型),那么在递归的时候必然是有变量来承接递归的返回值的。如果是返回bool型的递归,可以用if条件来判断,这种情况一般是查找一条符合条件的路径。这种情况直接返回nullptr就可以了,因为删除节点相当于把节点变为空。2.左子树空右子树不为空。原创 2023-10-23 16:50:48 · 326 阅读 · 0 评论 -
leetcode每日一题复盘(二叉搜索树)
对二叉搜索树的性质还不是很熟悉,不懂得利用其性质,做题没有方法论,这是暴露出来的问题,明天重做一下98,530,501这三个题,再进行总结。原创 2023-10-17 17:22:14 · 180 阅读 · 0 评论 -
leetcode 每日一题复盘(二叉树)
正确的解法是用类似层序遍历但不是层序遍历的思想,将左子树的左孩子和右子树的右孩子比较(外侧),将左子树的右孩子和右子树的左孩子比较(内侧),每一层(除第一层)都比较内外侧,如果不同就false,每次出队两个元素。修改后入队条件不再是看入队元素是否为空,而是看队列中的元素是否为空,这样就可以将空指针也入队同时解决操作空指针的问题,如果指针为空,那么用-101标志他(子树的值范围是-100~100)这样修改过后运行效率还可以,但是并没有完成理解这道题。树可以分成3种情况,都无孩子,一个孩子,和两个孩子。原创 2023-10-09 12:00:30 · 307 阅读 · 0 评论 -
leetcode每日一题复盘(二叉树,前中后层序遍历)
关键词:堆排序,优先队列,小根堆,后序遍历,层序遍历bfs,深度优先dfs,二叉树原创 2023-10-03 16:04:39 · 187 阅读 · 0 评论 -
leetcode每日一题复盘(字符串,滑动窗口)
leetcode 459 232 150 239原创 2023-09-25 11:59:02 · 110 阅读 · 0 评论 -
leetcode每日一题复盘(数组,字符串,KMP)
leetcode 202 454 15,151,28原创 2023-09-18 16:52:04 · 81 阅读 · 0 评论 -
leetcode 每日一题复盘(链表)
程序员面试金典原创 2023-09-09 17:17:23 · 57 阅读 · 0 评论 -
leetcode每日一题复盘(数组,链表)
leetcode 209,59,19,160,程序员面试金典原创 2023-09-02 21:29:12 · 66 阅读 · 0 评论 -
leetcode每日一题复盘(数组,字符串)
leetcode 1,4,48,283 程序员面试金典原创 2023-08-25 17:38:05 · 169 阅读 · 0 评论