算法题
文章平均质量分 69
一点一点进步,要逆袭成大佬!
鱼儿听雨眠
兴趣使然的创作者
展开
-
【背包问题九讲】第一讲:01背包问题(含Java实现代码)
本文讲解是崔添翼背包九讲系列的第一讲,讲解了01背包问题,并提供了Java实现代码。01 背包问题是最基本的背包问题,它包含了背包问题中设计状态、方程的最基本思想。另外,别的类型的背包问题往往也可以转换成 01 背包问题求解。故一定要仔细体会上面基本思路的得出方法,状态转移方程的意义,以及空间复杂度怎样被优化。原创 2023-10-15 16:23:14 · 989 阅读 · 0 评论 -
【LeetCode】1654:到家的最少跳跃次数的解题思路 & 关于力扣无法return的BUG的讨论
本人在作答“LeetCode 1654:到家的最少跳跃次数”时发现了一个力扣网站的问题,貌似是个BUG,拿出来和大家讨论一下。在 LeetCode 的官网上,if 语句在判断结果为 true 的条件下不会执行代码块中的 return 语句!!!把 Solution 类的代码直接复制到 IDEA 中则可以执行。可以通过另一个 break 解决:在同层次的另一个 if 语句的代码块中加入 break 语句后,之前不能执行的 break 和 return 语句可以正常执行了!!!原创 2023-08-31 11:32:24 · 765 阅读 · 0 评论 -
【力扣 leetcode】801:使序列递增的最小交换次数
方法一:动态规划。本题目有一个**隐藏条件**,数组中第 i 位的元素与数组第 i-1 位的元素只有两种可能的关系:1. 关系1:`nums1[i] > nums1[i-1]` 并且 `nums2[i] > nums2[i-1]`2. 关系2:`nums1[i] > nums2[i-1]` 并且 `nums2[i] > nums1[i-1]`至少要满足其中的一个关系,才能通过交换第 i 位元素,使这两个数组均严格单调递增。因此,数组中第 i 位的元素必定属于三种情况之一:……原创 2022-10-10 20:53:06 · 415 阅读 · 0 评论 -
【力扣 leetcode】870:优势洗牌
本文采用类似田忌赛马的思想:一、认清快马与慢马:首先,对`nums1`数组进行排序,因为无法对`nums2`数组排序,故我们采用一个下标数组`ids`间接实现对`nums2`数组的排序。二、田忌赛马:首先,从`nums1`中最小的元素开始与`nums2`中最小的元素比较。然后,如果慢马赢了慢马,那自然是最好的:如果`nums1[i]`大于`ids[i]`中对应的`nums2[ids[i]]`,我们使`ans[ids[left]] = x`其次,如果慢马赢不了慢马,那不如输……原创 2022-10-08 21:14:36 · 387 阅读 · 0 评论 -
【力扣 leetcode】921:使括号有效的最少添加
本文中分别采用贪心算法和递归算法两种方法求解。方法一: 贪心算法。遍历字符串的每一个字符,若字符为`(`,则左括号数量加1;若字符为`)`,且目前左括号数量不为0,那么就意味着有做括号可以和右括号相匹配。因此,将左括号数减1。若字符为`)`,且目前左括号数量为0。此时,无左括号可以与右括号匹配,需要添加左括号。故操作次数加1。此外,如果遍历完后左括号数量`left_num`不为0,那么就意味着有剩余的左括号,需要添加相同数量的右括号与之相匹配。故,操作次数……原创 2022-10-04 22:50:36 · 239 阅读 · 0 评论 -
【力扣 leetcode】1239:串联字符串的最大长度
采用回溯算法求解,全网最深入浅出易理解的讲解!1. 第一轮,假设最长的字符串一定包含列表中的第一个元素,我们从第2个元素开始判断能否和第1个元素合并。若能,我们可以合并得到一个新的字符串,但我们仍需要分别从合并该元素与不合并该元素两种情况出发查找满足合并规则的字符串;若不能,则不作操作。之后,再去判断第3个元素能否继续合并进来……依次对每个元素进行判断后,我们可以得到包含第一个元素的所有字符串。2. 之后,从每一个元素开始分别进行上述过程,我们就可以得到所有符合题目要求的字符串……原创 2022-09-30 13:09:38 · 627 阅读 · 2 评论 -
【力扣 leetcode】面试题 17.09:第k个数
【力扣 leetcode】面试题17.09:第k个数。本文采用动态规划的思想,分为三个步骤:确定存储信息、确定初值、确定递推公式来解决问题。存储信息:`dp[i]`存储第`i`个“好数”。确定初值:`dp[1]=1`。我们从下标1开始存储“好数”,题目中最小的“好数”为1。递推公式:`dp[i] = Math.min(Math.min(dp[pos3]*3, dp[pos5]*5), dp[pos7]*7)`……原创 2022-09-28 20:00:51 · 121 阅读 · 0 评论 -
【力扣 leetcode】面试题 17.19:消失的两个数字
【力扣 leetcode】2783:消失的两个数字。相比于其他的解法,本文的解法可以更轻松地扩展到缺少m个数字的情况。本文采用从限制条件入手的解法:利用数组的位下标`i`和对应值`nums[i]`的正负来记录数组`nums`中是否包含整数`i+1`。原创 2022-09-27 01:00:05 · 394 阅读 · 2 评论 -
【力扣 leetcode】698:划分为k个相等的子集
【力扣 leetcode】698:划分为k个相等的子集。本文中采用了剪枝和DFS搜索的方法,后附有详细代码。原创 2022-09-22 10:09:43 · 301 阅读 · 0 评论 -
【力扣 leetcode】1636:按照频率将数组升序排列
【力扣 leetcode】1636:按照频率将数组升序排列。首先,我们将数组按大小排序,以便后续统计出现频率。然后,我们将各元素及其出现频率以“(元素,频率)”的形式储存到一个列表中。其次,对列表进行排序。排序规则为:优先按频率升序排列,频率相同时按元素大小降序排列。最后,我们遍历列表,按照顺序和出现次数将元素移动到数组中。原创 2022-09-19 23:19:11 · 215 阅读 · 0 评论 -
【力扣 leetcode】850:矩形面积II
【力扣 leetcode】850:矩形面积II。本文采用扫描线和离散化的思想,使用数组进行维护。文章内包含详细代码和详细注释,并且突出了重点使用到的数据结构和部分方法。原创 2022-09-18 23:31:50 · 454 阅读 · 0 评论 -
【力扣 leetcode】670:最大交换
力扣 leetcode:670 最大交换原创 2022-09-13 21:01:26 · 527 阅读 · 3 评论