当前位置: 首页 > article >正文

Leetcode 486. 预测赢家

在这里插入图片描述

1、心路历程

这道题最开始想到的做法是回溯,因为看起来遍历就可以做,但是又想到同时需要维护两个人的数据就有点懵了。后来提示说用动态规划做是OK的。

这道题最难的地方在于,需要把输赢建模成“净胜分”,这样就能把两个主体合并为一个主体去动态规划。在明白了这一点之后,5分钟就自己写出来了。

这道题的本质和hot100里那个 乘积最大子数组 需要区分正负数一样,这里也需要区分两个人来分别递推。

2、注意的点

1、注意当递推到第二个人手里时,需要求得是一个最小值而不是最大值。

3、解法 递归动态规划:

class Solution:
    def predictTheWinner(self, nums: List[int]) -> bool:
        n = len(nums)
        @cache
        def dp(i, j, k): # i - j 区间的最大净胜值 k = 1代表先手者 否则是后手者
            if j - i == 0:
                if k == 1:
                    return nums[i]
                else:
                    return - nums[i]
            if k == 1:
                return max(nums[i] + dp(i+1, j, 0), nums[j] + dp(i, j-1, 0))
            else:
                return min(-nums[i] + dp(i+1, j, 1), - nums[j] + dp(i, j-1, 1))
        return dp(0, n-1, 1) >= 0

http://www.kler.cn/news/343216.html

相关文章:

  • JavaEE一条龙学习----前端开发准备(二)
  • MacOS M系列芯片安装部署 ComfyUI 快速手册
  • vue2中 vue-count-to组件让数字从某个数字动态的显示到某个数字(后附vue3的用法)
  • 开关打开输入框才能输入文字,否则为禁用状态
  • ACR、PZ、AMC仪表接线说明及通讯协议解析
  • Linux系统:apt-get update 和apt update区别
  • LUCEDA IPKISS Tutorial 77:在版图一定范围内填充dummy
  • 第十八篇——有什么比无穷大更大,比无穷小更小?
  • 视频监控集中管理方案:Liveweb视频智能监管系统方案技术特点与应用
  • 20241004给荣品RD-RK3588-AHD开发板刷Rockchip原厂的Android12时永不休眠的步骤
  • 【CTF Web】Pikachu 本地文件包含 Writeup(文件包含漏洞+GET请求)
  • 高级java每日一道面试题-2024年10月10日-中间件篇[设计篇]-结合项目场景问如何设计一个消息中间件?
  • 1688商品详情关键词数据-API
  • 低代码赋能汽车制造产业链场景系列
  • 【ubuntu】ubuntu20.04安装显卡驱动
  • Spring Boot 之 Lombok 使用详解
  • SAP 费用化采购订单简介
  • kubeadm 搭建k8s 1.28.2版本集群
  • Solon 3.0 新特性:SqlUtils
  • LeetCode-871 最低加油次数