Day20:贪心算法,跳跃游戏

1.55跳跃游戏

维护当前可达最远距离

  1. 如果i超过了当前可达最远距离,无法达到终点
  2. 当当前可达最远距离大于等于终点时,说明可达终点
python 复制代码
class Solution:
    def canJump(self, nums: List[int]) -> bool:
        max_jump = 0
        for i in range(len(nums)):
            if i > max_jump:
                return False
            max_jump = max(i + nums[i], max_jump)
            if max_jump >= len(nums)-1:
                return True
        
        return False

2.45跳跃游戏

返回到达 n-1的最小跳跃次数。测试用例保证可以到达 n-1

  1. 维护三个变量,跳跃次数,已访问的可达最远位置,当前能跳跃的最远距离

  2. cur_reach和max_reach的区别

  3. jumps不是在起跳时+1,程序不知道起跳点在哪,只是在必须要跳跃(超过当前跳跃边界)时才跳跃,故cur_reach不是起跳点!!

    1. jumps += 1 不是"记录起跳",而是"记录必须进行一次新跳跃"

    2. 真正的起跳点可能是当前边界内的任意位置

    3. 算法通过 farthest 隐式选择了最优起跳点/降落点

    4. 不关心从哪里跳,只关心跳几次

  4. 循环范围0,n-2:程序保证了一定能到达n-1,故在最后一个值前就确定了最后一跳,最后一个值是目标,而不是决定要不要起跳

python 复制代码
class Solution:
    def jump(self, nums: List[int]) -> int:
        n = len(nums)
        max_reach = 0
        jumps = 0
        cur_reach = 0
        for i in range(n-1):
            max_reach = max(max_reach, nums[i]+i)
            
            if i == cur_reach:
                jumps += 1
                cur_reach = max_reach

        return jumps

3.1005. K 次取反后最大化的数组和

我的错误:应该遍历k,k为0才结束,而我遍历数组,没有考虑到当所有的负数都变成整数且k还有剩余的情况

以下是正确代码:

  1. 负数:从小到大依次反转负数
  2. 非负数:只操作最小值,并且只在剩余k为奇数时反转最小值
  3. 两次排序
python 复制代码
class Solution:
    def largestSumAfterKNegations(self, nums: List[int], k: int) -> int:
        nums.sort()
        
        # 翻转所有负数
        for i in range(len(nums)):
            if nums[i] < 0 and k > 0:
                nums[i] = -nums[i]
                k -= 1
        
        # 如果k还有剩余
        if k % 2 == 1:
            # 翻转当前最小的元素
            nums.sort()  # 重新排序找到最小值
            nums[0] = -nums[0]
        
        return sum(nums)
相关推荐
ai小陈2 小时前
PyTorch DataLoader数据加载性能排查:GPU利用率低的实操指南
人工智能·pytorch·python·深度学习·ai·gpu算力
2601_962299245 小时前
Azure python操作系统列表
python·操作系统·azure·虚拟机·存储配置文件
学术 学术 Fun6 小时前
如何用 API 与 Webhook 批量把图表图片转换成 VSDX
python·自动化·api·visio
淡海水6 小时前
07-04-并发-ConcurrentBag-T-工作窃取WorkStealing算法
开发语言·算法·c#·bag·concurrent·workstealing
leobertlan7 小时前
好玩系列:训练一个神经网络模型指导小孩玩游戏2-大局观教练
算法
2601_962100547 小时前
python包和模块的内容整理
python·模块·导入·虚拟环境·
二进制漫游记7 小时前
FastAPI项目集成 Qdrant向量数据库+阿里云Embedding完整实战(工具封装+业务调用)
数据库·python·阿里云·embedding
Tisfy7 小时前
LeetCode 3876.构造奇偶一致的数组 II:三种情况分类讨论(其实还是脑筋急转弯)
算法·leetcode·题解·脑筋急转弯
-今昭-8 小时前
《V2V 迁移实战:将 VMware 虚拟机转为 OpenStack 可用 Glance qcow2 镜像》
开发语言·python
乐迪信息8 小时前
智慧港口船舶AI算法实现在线状态监测
大数据·人工智能·深度学习·算法·计算机视觉