代码随想录算法训练营第31天

42 阅读1分钟

122.买卖股票的最佳时机Ⅱ

不看答案还是太难想这种题了。。。只能多积累

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        value=[];res=0
        for i in range(1,len(prices)):
            value.append(prices[i]-prices[i-1])
        for i in range(len(value)):
            if value[i]>0:
                res+=value[i]
        return res

55.跳跃游戏

class Solution:
    def canJump(self, nums: List[int]) -> bool:
        index=0;i=0
        final_index=len(nums)-1
        while i<=index:
            index=max(index,i+nums[i])
            if index>=final_index:
                return True
            i+=1
        return False

45.跳跃游戏Ⅱ

class Solution:
    def jump(self, nums: List[int]) -> int:
        if len(nums)==1:
            return 0
        min_step=0
        res=0;i=0
        final_index=len(nums)-1
        current_max=0  #当前能到达的最远距离
        while i <= current_max:
            res=max(res,i+nums[i])
            if i==current_max: #到达能到达的最远距离时才增加步数
                min_step+=1
                current_max=res
                if res>=final_index:
                    break
            i+=1
        return min_step

1005.k次取反后最大化的数组和

class Solution:
    def largestSumAfterKNegations(self, nums: List[int], k: int) -> int:
        """
        先给数组排序,看元素正负,如果元素均非负数,就把最小的那个元素一直变
        如果最小元素有负,就给他变一次,然后重新排序
        如果最小元素是0,就一直变0就行
        """
        i=0;great_sum=0
        nums.sort()
        while i < k:
            if nums[0]>=0:
                nums[0]=-nums[0]
            else:
                nums[0]=-nums[0]
                nums.sort()
            i+=1
        great_sum=sum(nums)
        return great_sum