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

LeetCode每日一题 | 1686. 石子游戏 VI

文章目录

    • 题目描述
    • 问题分析
    • 程序代码

题目描述

原题链接

Alice 和 Bob 轮流玩一个游戏,Alice 先手。

一堆石子里总共有n个石子,轮到某个玩家时,他可以 移出 一个石子并得到这个石子的价值。Alice 和 Bob 对石子价值有 不一样的的评判标准 。双方都知道对方的评判标准。

给你两个长度为n的整数数组aliceValuesbobValuesaliceValues[i]bobValues[i] 分别表示AliceBob认为第i个石子的价值。

所有石子都被取完后,得分较高的人为胜者。如果两个玩家得分相同,那么为平局。两位玩家都会采用 最优策略 进行游戏。

请你推断游戏的结果,用如下的方式表示:

  • 如果 Alice 赢,返回 1 。
  • 如果 Bob 赢,返回 -1 。
  • 如果游戏平局,返回 0 。

问题分析

假设 Alice 选择石子i,Bob 选择石子j,则 Alice 与 Bob 之间的石子价值差为aliceValues[i] - bobValues[j];若 Alice 选择石子j,Bob 选择石子i,则 Alice 与 Bob 之间的石子价值差为aliceValues[j] - bobValues[i]

对比两种方案的优劣,可以对这两种方案的价值做差,即aliceValues[i] - bobValues[j] - (aliceValues[j] - bobValues[i]) = (aliceValues[i] + bobValues[i]) - (aliceValues[j] + bobValues[j])。即 Alice 和 Bob 采用的最优策略都是先选择aliceValues[i] + bobValues[i]值最大的。

因此,对aliceValues[i] + bobValues[i]值从大到小进行排序, Alice 和 Bob 依次选择,就是最终的结果。

程序代码

func stoneGameVI(aliceValues []int, bobValues []int) int {
    n := len(aliceValues)
    choices := make([][]int, n)
    for i := 0; i < n; i++ {
        choices[i] = []int{aliceValues[i] + bobValues[i], aliceValues[i]}
    }
    sort.Slice(choices, func(i, j int) bool {
        return choices[i][0] > choices[j][0]
    })
    
    aSum, bSum := 0, 0
    
    for i := 0; i < n; i++ {
        if i % 2 == 0 {
            aSum += choices[i][1]
        } else {
            bSum += choices[i][0] - choices[i][1]
        }
    }

    if aSum > bSum {
        return 1
    } else if aSum == bSum {
        return 0
    } else {
        return -1
    }
}

http://www.kler.cn/a/228402.html

相关文章:

  • 数据库事务详解
  • 【AI编辑器】字节跳动推出AI IDE——Trae,专为中文开发者深度定制
  • SQL-leetcode—1174. 即时食物配送 II
  • 备赛蓝桥杯之第十五届职业院校组省赛第二题:分享点滴
  • Linux编译安装Netgen/NGSolve
  • 【16届蓝桥杯寒假刷题营】第1期DAY5
  • 工厂模式与抽象工厂模式
  • 跨平台开发:浅析uni-app及其他主流APP开发方式
  • 为什么MFC中线程操作界面UI会出现异常问题,如何来避免或解决这种问题?
  • 基于OpenCV灰度图像转GCode的双向扫描实现
  • 产品研发时方向摇摆不定,变更频繁,该如何解决?
  • Linux---yum命令详解
  • java处理ppt方案详解
  • ChatGPT之制作短视频
  • Fink CDC数据同步(五)Kafka数据同步Hive
  • 机器学习系列——(十一)回归
  • PDF下载添加水印和访问密码
  • Hive与PrestoSQL中的并列列转行
  • 【C++历练之路】二叉搜索树的学习应用及其实现
  • flask_django_python五金电商网络营销的可视化分析研究
  • 使用 PyTorch 构建 NLP 聊天机器人
  • 详解SkyWalking前端监控的性能指标
  • 【MySQL】- 09 Select Count
  • 惠普公司也要注销了?
  • JAVA Web 学习(五)Nginx、RPC、JWT
  • WordPress Plugin HTML5 Video Player SQL注入漏洞复现(CVE-2024-1061)