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

【LeetCode】每日一题 2024_2_2 石子游戏 VI(排序、贪心)

文章目录

  • LeetCode?启动!!!
  • 题目:石子游戏 VI
    • 题目描述
    • 代码与解题思路

LeetCode?启动!!!

题目:石子游戏 VI

题目链接:1686. 石子游戏 VI

题目描述

代码与解题思路

func stoneGameVI(aliceValues []int, bobValues []int) int {type pair struct { x, y int }pairs := make([]pair, len(aliceValues))// 把 Alice 和 Bob 的石子计分保存下来for i := 0; i < len(aliceValues); i++ {pairs[i] = pair{aliceValues[i], bobValues[i]}}// 根据我们分析的性质进行排序slices.SortFunc(pairs, func(p, q pair) int { return (q.x + q.y) - (p.x + p.y) })// 根据最优解计算 Alice 和 Bob 的得分a, b := 0, 0for i, v := range pairs {if i % 2 == 0 {a += v.x} else {b += v.y}}// 比较最后谁赢了if a > b {return 1} else if a < b {return -1}return 0
}

题目中 Alice 和 Bob 玩石子游戏,游戏的规则是:有一堆石子,每次可以拿石子堆中任意一个石子,拿过的石子不能再被拿

而 Alice 和 Bob 的计分方式是不同的,Alice 先手,如果要最优解,那 Alice 每次必须拿给自己和 Bob 加分最多的石子(这样自己加分多,Bob 少了这个石子加分就少了),也就是她拿的石子的 aliceValues[i] + bobValues[i] 越大越好

而 Bob 也是同样的,拿给自己和 Alice 加分最多的石子就行,也就是说,我们只需要按照这个规则升序排序 aliceValues[i] + bobValues[i],然后就能通过最优解求出他们最后到底谁会赢了

这次还学习了 go 语言 slices 包的自己指定规则排序数组:

slices.SortFunc(pairs, func(p, q pair) int {
return (q.x + q.y) - (p.x + p.y)
})

用:后一个数 - 前一个数 = 升序排序

这里的排序规则就是我们前面提到的 aliceValues[i] + bobValues[i],通过 pairs 数组保存住 Alice 和 Bob 每个石子的价值,遍历的时候计算,最后再比较他们的大小即可

http://www.lryc.cn/news/292381.html

相关文章:

  • 一站式在线协作开源办公软件ONLYOFFICE,协作更安全更便捷
  • Java进击框架:Spring-综合(十)
  • 2024年第九届信号与图像处理国际会议(ICSIP 2024)
  • webassembly003 MINISIT mnist/convert-h5-to-ggml.py
  • fetch和axios的区别
  • 【unity小技巧】FPS简单的射击换挡瞄准动画控制
  • 如何获取时间戳
  • VSCode 设置代理
  • 保姆级教程: 零门槛制作AI微信红包封面之入门篇
  • Redis核心技术与实战【学习笔记】 - 17.Redis 缓存异常:缓存雪崩、击穿、穿透
  • Leetcode—2670. 找出不同元素数目差数组【简单】
  • App ICP备案获取iOS和Android的公钥和证书指纹
  • 猿创征文 | 项目整合KafkaStream实现文章热度实时计算
  • 状态压缩 笔记
  • Java 数据结构篇-实现二叉搜索树的核心方法
  • go语言(二十一)---- channel的关闭
  • 【PyQt】01-PyQt下载
  • 不一样的味觉体验:精酿啤酒与烤肉的绝妙搭配
  • linux系统ansible的jiaja2的语法和简单剧本编写
  • Three.js PBR 物理渲染
  • POSIX(包含程序的可移植性) -- 详解
  • Jmeter学习系列之五:基础线程组(Thread Group)
  • Android 双卡适配 subId 相关方法
  • 使用Logstash将MySQL中的数据同步至Elasticsearch
  • 米贸搜|Facebook公共主页反馈分数(ACE) 更新
  • 代码随想录算法训练营第三十七天| 738.单调递增的数字、968.监控二叉树
  • 51单片机编程应用(C语言):独立按键
  • 小程序定制开发前,应该考虑些什么?
  • 2024/2/1学习记录
  • 10个React状态管理库推荐