122. 买卖股票的最佳时机 II
思路:
局部最优:收集每天的正利润,全局最优:求得最大利润。
因为每天买了第二天可以卖,重要的是把明天和今天为一组求出盈利亏损,然后亏损就不要买,盈利就买
代码:
class Solution:
def maxProfit(self, prices: List[int]) -> int:
if len(prices)==1:
return 0
count = 0
for i in range(1,len(prices)):
count +=max(prices[i]-prices[i-1],0)
return count
遇到的问题:
1.对于可以把两天为一组的思路,没有想到
55. 跳跃游戏
思路:
贪心算法局部最优解:每次取最大跳跃步数(取最大覆盖范围),整体最优解:最后得到整体最大覆盖范围,看是否能到终点。
不用管具体跳到哪一格,而是边遍历格子,边计算最大跳到的范围,如果遇到跳不到的情况就中止
代码:
class Solution:
def canJump(self, nums: List[int]) -> bool:
cover = 0
if len(nums) == 1:
return True
i =0
while i <=cover:
cover = max(i+nums[i],cover)
if cover >= len(nums)-1:
return True
i+=1
return False
遇到的问题:
没有想到可以统计最大跳跃范围的思路
45. 跳跃游戏 II
思路:
贪心的思路,局部最优:当前可移动距离尽可能多走,如果还没到终点,步数再加一。整体最优:一步尽可能多走,从而达到最少步数。
代码:
class Solution:
def jump(self, nums: List[int]) -> int:
curcover = 0
nextcover = 0
result = 0
i=0
while i < len(nums)-1 :
nextcover = max(i+nums[i] ,nextcover)
if curcover == i:
curcover =nextcover
result+=1
i+=1
return result
遇到的问题:
1005. K 次取反后最大化的数组和
思路:
贪心的思路,局部最优:让绝对值大的负数变为正数,当前数值达到最大,整体最优:整个数组和达到最大。
代码:
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] = abs(nums[i])
k-=1
while k>0:
nums[-1]*=-1
k-=1
result =sum(nums)
return result
遇到的问题:
对于python的排序操作例如nums.sort(key = lambda x : abs(x),reverse = True),key是传入一个用来处理nums元素的函数,然后进行排序,reverse是降序的意思,=True是降序的意思

被折叠的 条评论
为什么被折叠?



