力扣刷题
文章平均质量分 80
就是有点傻
我自飘零我自狂,犹如野鹤游四方
展开
-
力扣刷题----1186. 删除一次得到子数组最大和
我们以 dp[i][k] 表示以 arr[i] 结尾,删除 k 次的非空子数组的最大和(删除前的末尾元素为 arr[i],就视为以 arr[i] 结尾)。初始时 dp[0][0]=arr[0],dp[0][1]=0(以 arr[0] 结尾,删除一次的非空子数组不存在,因此 dp[0][1] 不会计入结果)。换句话说,你可以从原数组中选出一个子数组,并可以决定要不要从中删除一个元素(只能删一次哦),(删除后)子数组中至少应当有一个元素,然后该子数组(剩下)的元素总和是所有子数组之中最大的。原创 2024-07-21 20:35:12 · 222 阅读 · 0 评论 -
力扣刷题----88. 合并两个有序数组
这一方法将两个数组看作队列,每次从两个数组头部取出比较小的数字放到结果中。注意,因为 m = 0 ,所以 nums1 中没有元素。nums1 中仅存的 0 仅仅是为了确保合并结果可以顺利存放到 nums1 中。,5,6] ,其中斜体加粗标注的为 nums1 中的元素。最终,合并后数组不应由函数返回,而是存储在数组。需要合并 [1,2,3] 和 [2,5,6]。需要合并的数组是 [] 和 [1]。个元素表示应合并的元素,后。需要合并 [1] 和 []。中,使合并后的数组同样按。合并结果是 [1]。原创 2024-07-22 17:52:15 · 229 阅读 · 0 评论 -
力扣刷题----27. 移除元素
/ 它以不等于 val 的值排序。你的函数应该返回 k = 5,并且 nums 中的前五个元素为 0,0,1,3,4。// 长度正确的预期答案。// 排序 nums 的前 k 个元素。你在返回的 k 个元素之外留下了什么并不重要(因此它们并不计入评测)。你在返回的 k 个元素之外留下了什么并不重要(因此它们并不计入评测)。你的函数函数应该返回 k = 2, 并且 nums。元素的顺序可能发生改变。如果所有的断言都通过,你的解决方案将会。中的前两个元素均为 2。原创 2024-07-22 19:55:24 · 413 阅读 · 0 评论 -
力扣刷题----26. 删除有序数组中的重复项
思路提示: 首先,我们知道数组nums是有序的,而且我们只能在原地修改nums数组,不能创建新的数组空间来存储删除重复出现的元素后的结果。我们需要一边遍历数组查找相同元素,一边在对比发现不同元素时修改数组元素,那么我们可以考虑双指针法的快慢指针了,定义slow和fast作为指针,初始化时指针slow指向数组的起始位置(nums[0]),指针fast指向指针slow的后一个位置(nums[1])。随着指针fast不断向后移动,将指针fast指向的元素与指针slow指向的元素进行比。,返回删除后数组的新长度。原创 2024-07-23 10:46:42 · 416 阅读 · 0 评论 -
力扣刷题----80. 删除有序数组中的重复项 II
具体地,我们定义两个指针 slow 和 fast 分别为慢指针和快指针,其中慢指针表示处理出的数组的长度,快指针表示已经检查过的数组的长度,即 nums[fast] 表示待检查的第一个元素,nums[slow−1] 为上一个应该被保留的元素所移动到的指定位置。特别地,数组的前两个数必然可以被保留,因此对于长度不超过 2 的数组,我们无需进行任何处理,对于长度超过 2 的数组,我们直接将双指针的初始值设为 2 即可。方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。,返回删除后数组的新长度。原创 2024-07-23 19:24:04 · 313 阅读 · 0 评论 -
力扣刷题----169. 多数元素
我们用一个循环遍历数组 nums 并将数组中的每个元素加入哈希映射中。在这之后,我们遍历哈希映射中的所有键值对,返回值最大的键。我们同样也可以在遍历数组 nums 时候使用打擂台的方法,维护最大的值,这样省去了最后对哈希映射的遍历。对于哈希映射中的每个键值对,键表示一个元素,值表示该元素出现的次数。我们知道出现次数最多的元素大于 ⌊ n /2⌋ 次,所以可以用哈希表来快速统计每个元素出现的次数。你可以假设数组是非空的,并且给定的数组总是存在多数元素。,返回其中的多数元素。多数元素是指在数组中出现次数。原创 2024-07-23 21:20:08 · 778 阅读 · 0 评论 -
力扣刷题----189. 轮转数组
假设原数组 nums 的长度是 n,则创建长度相等的新数组 newNums 存储旋转后的元素。根据旋转规则,对于 0≤i原创 2024-07-24 17:39:04 · 434 阅读 · 0 评论 -
力扣刷题----121. 买卖股票的最佳时机
在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回。设计一个算法来计算你所能获取的最大利润。在这种情况下, 没有交易完成, 所以最大利润为 0。首先我自己用暴力求解然后超时了。买入这只股票,并选择在。原创 2024-07-24 19:52:05 · 275 阅读 · 0 评论 -
力扣刷题----122. 买卖股票的最佳时机 II
考虑 dp[i][0] 的转移方程,如果这一天交易完后手里没有股票,那么可能的转移状态为前一天已经没有股票,即 dp[i−1][0],或者前一天结束的时候手里持有一支股票,即 dp[i−1][1],这时候我们要将其卖出,并获得 prices[i] 的收益。再来考虑 dp[i][1],按照同样的方式考虑转移状态,那么可能的转移状态为前一天已经持有一支股票,即 dp[i−1][1],或者前一天结束时还没有股票,即 dp[i−1][0],这时候我们要将其买入,并减少 prices[i] 的收益。原创 2024-07-25 17:19:03 · 944 阅读 · 0 评论 -
力扣刷题----55. 跳跃游戏
贪心算法是一种在每一步选择中都采取当前状态下最优(或最有利)的选择,从而希望全局最优解的算法策略。这种策略并不能保证总是得到最优解,但在某些问题上它可以产生有效的解决方案。原创 2024-07-25 21:18:16 · 901 阅读 · 0 评论 -
力扣刷题----45. 跳跃游戏 II
例如,对于数组 [2,3,1,2,4,2,3],初始位置是下标 0,从下标 0 出发,最远可到达下标 2。下标 0 可到达的位置中,下标 1 的值是 3,从下标 1 出发可以达到更远的位置,因此第一步到达下标 1。下标 1 可到达的位置中,下标 4 的值是 4 ,从下标 4 出发可以达到更远的位置,因此第二步到达下标 4。在具体的实现中,我们维护当前能够到达的最大下标位置,记为边界。从下标为 0 跳到下标为 1 的位置,跳 1步,然后跳 3步到达数组的最后一个位置。但是此方法时间复杂度过高O(n2)原创 2024-07-26 17:41:57 · 609 阅读 · 1 评论 -
力扣刷题----274. H 指数
我们需要找到一个值 h,它是满足「有 h 篇论文的引用次数至少为 h」的最大值。小于等于 h 的所有值 x 都满足这个性质,而大于 h 的值都不满足这个性质。同时因为我们可以用较短时间(扫描一遍数组的时间复杂度为 O(n),其中 n 为数组 citations 的长度)来判断 x 是否满足这个性质,所以这个问题可以用二分搜索来解决。如果有,说明要寻找的 h 在搜索区间的右边,反之则在左边。给定数组表示研究者总共有 5篇论文,每篇论文相应的被引用了 3, 0, 6, 1, 5 次。篇论文被引用的次数。原创 2024-07-26 19:56:29 · 327 阅读 · 0 评论 -
力扣刷题----238. 除自身以外数组的乘积
而是用一个遍历来跟踪右边元素的乘积。然后 R 更新为 R=R∗nums[i],其中变量 R 表示的就是索引右侧数字的乘积。由于输出数组不算在空间复杂度内,那么我们可以将 L 或 R 数组用输出数组来计算。刚开始看到题目准备先计算整个数组的乘积 再用乘积除以当时的索引位置本身的数 便可以得到答案 但是题目中不让用除法。初始化 answer 数组,对于给定索引 i,answer[i] 代表的是 i 左侧所有数字的乘积。构造方式与之前相同,只是我们试图节省空间,先把 answer 作为方法一的 L 数组。原创 2024-07-27 11:12:53 · 322 阅读 · 0 评论 -
力扣刷题----134. 加油站
你无法返回 2 号加油站,因为返程需要消耗 4 升汽油,但是你的油箱只有 3 升汽油。开往 3 号加油站,你需要消耗 5 升汽油,正好足够你返回到 3 号加油站。开往 4 号加油站,此时油箱有 4 - 1 + 5 = 8 升汽油。开往 1 号加油站,此时油箱有 7 - 3 + 2 = 6 升汽油。开往 2 号加油站,此时油箱有 6 - 4 + 3 = 5 升汽油。开往 0 号加油站,此时油箱有 4 - 3 + 2 = 3 升汽油。开往 1 号加油站,此时油箱有 3 - 3 + 3 = 3 升汽油。原创 2024-07-27 15:48:18 · 1026 阅读 · 0 评论 -
力扣刷题----135. 分发糖果
具体地,以左规则为例:我们从左到右遍历该数组,假设当前遍历到位置 i,如果有 ratings[i−1]原创 2024-07-27 17:34:08 · 664 阅读 · 0 评论 -
力扣刷题----42. 接雨水
动态规划(Dynamic Programming,简称DP)是一种在数学、管理科学、计算机科学、经济学和生物信息学等领域中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划经常用于求解具有重叠子问题和最优子结构性质的问题。这里的“重叠子问题”是指在递归算法中反复出现的问题,而“最优子结构”是指问题的最优解包含其子问题的最优解。原创 2024-07-28 18:00:15 · 931 阅读 · 0 评论 -
力扣刷题----13. 罗马数字转整数
若存在小的数字在大的数字的左边的情况,根据规则需要减去小的数字。对于这种情况,我们也可以将每个字符视作一个单独的值,若一个数字右侧的数字比它大,则将该数字的符号取反。通常情况下,罗马数字中小的数字在大的数字的右边。若输入的字符串满足该情况,那么可以将每个字符视作一个单独的值,累加每个字符对应的数值即可。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做。,即为两个并列的 1。原创 2024-07-29 15:57:09 · 632 阅读 · 0 评论