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 = 0
curDiff = 0
for i in range(1, len(prices)):
curDiff = prices[i] - prices[i-1]
if curDiff >= 0:
result += curDiff
return result
2.跳跃游戏

思路:

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

思路:

class Solution:
def jump(self, nums: List[int]) -> int:
if len(nums) == 1:
return 0
cur = 0
next = 0
result = 0 #记录结果
for i in range(len(nums)):
next = max(i + nums[i], next)
if i == cur:
result += 1
cur = next
if cur >= len(nums) - 1:
break
return 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] *= -1
k -= 1
if k % 2 == 1: #如果k有剩余,但为什么是取余呢,因为如果是偶数的话可以消掉
nums[-1] *= -1
result = sum(nums)
return result
今天结束啦!明天继续加油