ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

第二十八天:贪心算法part02(第八章)

2026/8/15 3:48:22 拓冰建站 浏览量
第二十八天:贪心算法part02(第八章)

1.买卖股票的最佳时机2

122. 买卖股票的最佳时机 II - 力扣(LeetCode)

 思路:

class Solution:def maxProfit(self, prices: List[int]) -> int:#举例子:第1天买入,第3天卖出可以写成:p[2]-p[0] = p[2]-p[1] + p[1]-p[0]#列出每天的利润result = 0curDiff = 0for i in range(1, len(prices)):curDiff = prices[i] - prices[i-1]if curDiff >= 0:result += curDiffreturn result

2.跳跃游戏

55. 跳跃游戏 - 力扣(LeetCode)

思路:

class Solution:def canJump(self, nums: List[int]) -> bool:#每个元素代表你在该位置可以跳的最大长度#判断当前元素的覆盖面能否达到最后一个下标cover = 0if len(nums) == 1:return Truefor i in range(len(nums)-1):#当前下标 i 如果已经超出了你能到达的最远范围 cover,说明你走不到这一步,直接返回 Falseif i > cover:return Falsecover = max(i + nums[i], cover)#如果你能跳到或超过最后一个元素,说明可以到达终点,返回 Trueif cover >= len(nums) - 1:return Truereturn False

3.跳跃游戏II:有点绕,需要多理解!

45. 跳跃游戏 II - 力扣(LeetCode)

 思路:

class Solution:def jump(self, nums: List[int]) -> int:if len(nums) == 1:return 0cur = 0next = 0result = 0 #记录结果for i in range(len(nums)):next = max(i + nums[i], next)if i == cur:result += 1cur = nextif cur >= len(nums) - 1:breakreturn result

4.K次取反后最大化的数组和:这题相比之下简单许多

1005. K 次取反后最大化的数组和 - 力扣(LeetCode)

 

class Solution:def largestSumAfterKNegations(self, nums: List[int], k: int) -> int:nums.sort(key = lambda x: abs(x), reverse = True) #按照绝对值的大小, 降序排列for i in range(len(nums)):if nums[i] < 0 and k >0:nums[i] *= -1k -= 1if k % 2 == 1: #如果k有剩余,但为什么是取余呢,因为如果是偶数的话可以消掉nums[-1] *= -1result = sum(nums)return result

 今天结束啦!明天继续加油