122.买卖股票的最佳时机II
122. 买卖股票的最佳时机 II - 力扣(LeetCode)
思路:这道题的关键是想到把相隔几天的出售转化为每一天的出售,例如第一天买,第三天卖,可以转化为第一天买,第二天卖,第二天买,第三天卖,所以说只需要统计每一天和前一天比的差值,如果能赚的钱大于0就视为买入,如果<=0,那就不买入
class Solution:
def maxProfit(self, prices: List[int]) -> int:
result=0
for i in range(1,len(prices)):
result+=max(prices[i]-prices[i-1],0)
return result
55. 跳跃游戏
思路:不需要具体的考虑每一格怎么走到,只需要找到每一次能达到的最大范围,如果最大范围超过了最后一格,就可以,但如果一次计算过后,范围没有变化,说明无法到达最后一格,返回False
class Solution:
def canJump(self, nums: List[int]) -> bool:
end=nums[0]
start=0
if nums[0]>=len(nums)-1:
return True
while start<len(nums)-1:
max_step=start+nums[start]
for i in range(start+1,min(end+1,len(nums))):
max_step=max(max_step,i+nums[i])
if max_step<=end:
return False
start=end
end=max_step
if end>=len(nums)-1:
return True
return True
45.跳跃游戏II
思路:这道题和上一道总体类似,也是循环的计算能到达的最远距离,一开始将step设为1,如果这个距离能达到,就返回当前的step,不能就把step+1,然后计算新的一轮的最远距离
class Solution:
def jump(self, nums: List[int]) -> int:
end=nums[0]
start=0
if len(nums)==1:
return 0
step=1
if nums[0]>=len(nums)-1:
return 1
while start<len(nums)-1:
max_step=start+nums[start]
for i in range(start+1,min(end+1,len(nums))):
max_step=max(max_step,i+nums[i])
start=end
end=max_step
step+=1
if end>=len(nums)-1:
return step
1005.K次取反后最大化的数组和
1005. K 次取反后最大化的数组和 - 力扣(LeetCode)
思路:这道题感觉不能算贪心了,就是先排序,看能否把所有负数的取反,如果k的数量小于负数的数量就取反,如果超过,看超过的是奇数还是偶数,偶数就不管,奇数就把新的数组先重新排序,再把最小的取反
class Solution:
def largestSumAfterKNegations(self, nums: List[int], k: int) -> int:
nums.sort()
cnt=0
while cnt<len(nums) and nums[cnt]<0:
cnt+=1
if cnt>=k:
for i in range(k):
nums[i]=-nums[i]
elif cnt<k:
for i in range(cnt):
nums[i]=-nums[i]
nums.sort()
if (k-cnt)%2==1:
nums[0]=-nums[0]
result=0
for i in range(len(nums)):
result+=nums[i]
return result

2189

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



