1、买卖股票
class Solution:
def maxProfit(self, prices: List[int]) -> int:
result = 0
for i in range(1,len(prices)):
if prices[i] - prices[i-1] > 0 :
result += prices[i] - prices[i-1]
return result
计算出每两天之间的利润,挑正值相加即可
2、跳跃游戏
class Solution:
def canJump(self, nums: List[int]) -> bool:
cover = 0 # 定义目前可以跳跃到的距离
if len(nums) == 0:
return False
for i in range(len(nums)): # 对每格计算能跳到的距离
if i <= cover: # 只计算能目前能跳跃到的格子
# 目前能跳到的距离等于 之前能跳到的距离 和 现在的距离 的最大值
cover = max(i+nums[i],cover)
if cover >= (len(nums) - 1): # 如果能覆盖到最后一格了, 返回True
return True
return False # 跑完了循环还没有cover到,返回False
3、跳跃游戏II
class Solution:
def jump(self, nums: List[int]) -> int:
if len(nums) == 1: return 0
cur = 0
next_step = 0
step = 0
for i in range(len(nums)-1):
next_step = max(nums[i]+i,next_step) # 和上一题一样,求当前覆盖的最大面积
# 当i == 目前位置的时候,跳跃至最大位置,如果跳出界了,这里就不可能再更新
if i == cur :
cur = next_step
step += 1 # 更新步数
return step
4、K次取反后最大化的数组和
class Solution:
def largestSumAfterKNegations(self, nums: List[int], k: int) -> int:
i = 0
nums.sort()
# 先把次数全用到绝对值最大的负数上
while i < len(nums) and nums[i] < 0 and k > 0:
nums[i] *= (-1)
i += 1
k -= 1
nums.sort()
# 再把次数用到绝对值最小的数字上
if nums[0] >= 0 and k > 0:
nums[0] = nums[0]*pow((-1),(k%2))
return sum(nums)