首页 > 编程语言 >代码随想录算法训练营day27| 122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II 1005.K次取反后最大化的数组和

代码随想录算法训练营day27| 122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II 1005.K次取反后最大化的数组和

时间:2024-10-27 19:48:02浏览次数:1  
标签:return 游戏 nums int 取反 len II 跳跃 贪心

学习资料:https://programmercarl.com/0122.买卖股票的最佳时机II.html#算法公开课

贪心PART2

学习记录:
122.买卖股票的最佳时间2 (求最大利润,贪心:把所有正数相加;后一天与当天的股票价格差值,若为正就加入利润,若为负,则不加)

点击查看代码
class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        # 贪心法:计算隔天的价格涨跌值,若为正数就是最佳时机的组成之一
        result = 0
        for i in range(1, len(prices)):  # 从第二天开始,保证i-1存在
            add_p = max(prices[i]-prices[i-1], 0)  # 若涨价则结果加上该值,若跌就加0
            result += add_p
        return result
        

55.跳跃游戏(参数:覆盖范围cover,当前位置i对应的可跳范围i+nums[i],贪心:求最大覆盖范围,能到最后一个值,就是可跳跃的)

点击查看代码
class Solution:
    def canJump(self, nums: List[int]) -> bool:
        # 贪心:尽量要大的覆盖范围,最终得最大覆盖范围
        if len(nums) == 1:  # 如果只有一个元素,那已经跳到最后一个位置了
            return True
        cover_index = 0     # 求可覆盖范围的最后位置的脚标
        for i in range(len(nums)):
            if i<=cover_index:  # 若最多跳2步,那可跳1步,跳2步,在覆盖范围内随便跳
                # 若可跳范围超过覆盖范围,就更新覆盖范围
                cover_index = max(cover_index, i+nums[i]) 
                # 覆盖范围脚标大于等于最后一个元素的脚标就满足条件了 
                if cover_index >= len(nums)-1:
                    return True
        return False
        

45.跳跃游戏2(比较难,当前可跳范围终点为cur,当前位置i可跳范围next=max(next, i+nums[i]),当到达可跳范围终点却还没到数组最后一位数时,则得继续跳,若next包含数组最后一个数,则刚刚跳完必到,就不用跳下一次了)

点击查看代码
class Solution:
    def jump(self, nums: List[int]) -> int:
        # 贪心法:看下一次跳跃范围,如果不能到终点,必然就还要再跳下一步
        cur = 0  # 当前位置
        next = 0 # 下一步最远能跳的位置
        result = 0  # 最终需要跳跃的步数
        if len(nums)==1:  # 如果第一步就是最后一步,就根本不需要跳
            return 0
        for i in range(len(nums)):
            next = max(next, i+nums[i])  # 该步可跳范围内,每个位置能继续跳的范围不同,只有当覆盖范围增大时,才更新最远覆盖位置
            if i == cur:   # 当索引走到当前位置
                if i != len(nums)-1:   
                    result += 1   # 跳下一步了
                    cur = next    # 当前位置更新
                    if cur >= len(nums)-1:  # 说明此时覆盖位置包含了最后一个位置,ok
                        break
                else:
                    break   # 当前位置正好是最后位置,就不用跳了
        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] *= -1       # 取反
                k -= 1              # 操作次数减一
         # 如果所有负数都变成正数了,还有操作次数,就全部对绝对值最小的那个数进行取正负操作,如果次数是偶数,则结果不变,如果是奇数,则结果取反。
        if k%2 == 1:   
            nums[-1] *= -1
        return sum(nums)

        

PS:今天补周六的内容,今天天气超好,开心心
吃大餐咯,心心念念的部队火锅(我妈有能让任何菜变香变辣的魔法),圆子汤,还有不停炫的水果,爽歪歪

标签:return,游戏,nums,int,取反,len,II,跳跃,贪心
From: https://www.cnblogs.com/tristan241001/p/18508822

相关文章

  • P11234 [CSP-S 2024] 擂台游戏 题解
    P11234[CSP-S2024]擂台游戏题解前言作者在考场上用了约1h把前三道题做完了,然后用了约半小时想了带\(\log\)的做法,但是我决定放手一搏去想线性的做法,于是又想了有1h之后觉得想到了正解,然后我就一直写到了考试结束,但是最终没有调出来遗憾离场,因此写个题解来纪念一下。......
  • Python小游戏13——植物大战僵尸
    代码 importrandomimporttime #植物类classPlant:  def__init__(self,name,health):    self.name=name    self.health=health   defis_alive(self):    returnself.health>0 #僵尸类classZombie: ......
  • Python小游戏14——雷霆战机
     首先,你需要确保安装了Pygame库。如果你还没有安装,可以使用pip来安装: bashpipinstallpygame代码如下:pythonimportpygameimportsysimportrandom #初始化Pygamepygame.init() #设置屏幕大小screen_width=800screen_height=600screen=pygam......
  • 关于C++游戏开发
            C++是一种广泛用于游戏开发的编程语言,尤其是在性能要求较高的游戏中。它提供了对硬件级别的控制以及高效的执行速度,这使得C++成为了许多专业游戏引擎和AAA级游戏的选择。以下是一些关于C++游戏开发的关键点:1.游戏引擎UnrealEngine:使用C++作为主要编......
  • 计算机如何储存数字和字符,与各种进制的本质,与ASCII码
    前言        我想问大家一个问题:二进制、八进制、十进制、十六进制究竟是计算机中才有的概念,还是可以脱离计算机仅仅作为数学概念而独立存在呢?    答案是后者,如果你不曾想过这个问题,你也就大概不能十分清晰的理解计算机对于数字与字符的存储。    ......
  • 代码随想录算法训练营Day45 | 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II、1
    目录121.买卖股票的最佳时机122.买卖股票的最佳时机II123.买卖股票的最佳时机III121.买卖股票的最佳时机题目121.买卖股票的最佳时机-力扣(LeetCode)给定一个数组prices,它的第i个元素prices[i]表示一支给定股票第i天的价格。你只能选择某一天买入这只......
  • 雷神口令兑换码,雷神2024新一批CDKEY,免费领取游戏加速时长
    现在社会互联网发展十分的迅速,很多高质量网游也慢慢的走进了玩家的生活,但是想要畅玩游戏的话,少不了游戏加速器的支持。首先要明白,我们在游戏时之所以会出现网络延迟、跳ping、卡顿、丢包等各种问题,都是因为本地网络连接服务器不稳定导致的。尤其是海外网络,游戏服务器距离国内玩家......
  • 如何进行游戏物理模拟?
    游戏物理模拟要做到准确和流畅,你需要遵循以下几个步骤:1.理解物理基础;2.选择合适的物理引擎;3.优化物体碰撞检测;4.模拟物体动态行为;5.考虑外部环境因素如气象和地形影响。首要任务是对物理原理有清晰的认识,确保游戏内的行为仿真真实世界。1.理解物理基础对于游戏开发者而言,深入......
  • 数据结构:“小猫钓鱼游戏”
    一:题目栈和队列的综合应用:“小猫钓鱼”的游戏规则是:将一副扑克牌平均分成两份,每人拿一份。玩家甲先拿出手中的第一张扑克牌放在桌上,然后玩家乙也拿出手中的第一张扑克牌,并放在玩家甲刚打出的扑克牌的上面,就像这样两个玩家交替出牌。出牌时,如果某人打出的牌与桌上某张牌的牌......
  • 编写一个简单的Iinput_dev框架
    往期内容本专栏往期内容:input子系统的框架和重要数据结构详解-CSDN博客inputdevice和inputhandler的注册以及匹配过程解析-CSDN博客inputdevice和inputhandler的注册以及匹配过程解析-CSDN博客I2C子系统专栏:专栏地址:IIC子系统_憧憬一下的博客-CSDN博客具体芯片的II......