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

LeetCode.1686. 石子游戏 VI

题目

题目链接

分析

本题采取贪心的策略
我们先假设只有两个石头a,b,
对于 Alice 价值分别为 a1,a2,
对于 Bob 价值而言价值分别是 b1,b2

  1. 第一种方案是 Alice取第一个,Bob 取第二个,Alice与Bob的价值差是 c1 = a1 - b1;
  2. 第一种方案是 Alice取第二个,Bob 取第一个,Alice与Bob的价值差是 c1 = a2 - b2;

那么这两种方案对于 Alice来说哪一种更优呢??
取决于两种方案的价值差,记 c = c1 - c2 = (a1 - b2) - (a2 - b1) = (a1 + b1) - (a2 + b2);
如果 c > 0,那么方案一更优,如果 c == 0,则两种方案一样,如果 c < 0,则方案二更优。

那么比较两个方案的优劣其实就是比较 a1+b1 与 a2+b2 的优劣,也就是比较每个下标i的a[i]+b[i]的优劣。

所以贪心的策略:将两组石头的价值合并,每次取价值最大的那一组。

总结以上:先将两个数组的价值合并,并用下标去标记,对价值进行排序,
Alice取偶数下标,Bob取奇数下标,最后比较Alice和Bob的价值总和。

代码

class Solution {public int stoneGameVI(int[] aliceValues, int[] bobValues) {int n = aliceValues.length;Integer[] ids = new Integer[n];for (int i = 0; i < n; ++i) ids[i] = i;// 两个数组价值之和按照 大->小 排序,ids 记录下标// 例如: aliceValues = {1, 2, 3}; bobValues = {3, 1, 3};// 经过下面的代码:ids = {2,0,1}Arrays.sort(ids, (a, b) -> {int val1 = aliceValues[a] + bobValues[a];int val2 = aliceValues[b] + bobValues[b];return val2 - val1;});// Alice 价值总和int alisCount = 0;// Bob 价值总和int bobCount = 0;for(int i  =0;i < n;i ++) {// 偶数下标,Alice取值if(i % 2 == 0) {alisCount += aliceValues[ids[i]];}else {// 奇数下标,Bob取值bobCount += bobValues[ids[i]];}}if(alisCount - bobCount > 0) {return 1;}else if(alisCount == bobCount) {return 0;}else {return -1;}}
}

在这里插入图片描述

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

相关文章:

  • 【硬件产品经理】锂电池充电时间怎么计算?
  • Oracle篇—普通表迁移到分区表(第五篇,总共五篇)
  • 作为开发人的我们,怎么可以不了解这些?
  • 基于 Echarts 的 Python 图表库:Pyecahrts交互式的日历图和3D柱状图
  • web应用课——(第四讲:中期项目——拳皇)
  • Python爬虫http基本原理
  • iOS17使用safari调试wkwebview
  • 二叉树(1)
  • ArcGIS Pro字段编号相关代码
  • AJAX-URL查询参数
  • DBeaver连接ClickHouse,时间少了8小时
  • week03day03(文件操作、正则表达式1)
  • 【数据分享】1929-2023年全球站点的逐年最高气温数据(Shp\Excel\免费获取)
  • 数据结构—基础知识:哈夫曼树
  • 计算机网络(第六版)复习提纲24
  • [机器学习]TF-IDF算法
  • Loadbalancer如何优雅分担服务负荷
  • 计算机网络——链路层(1)
  • OpenCV 0 - VS2019配置OpenCV
  • eCos flash模拟EEPROM实现NV系统
  • 【MongoDB】跨库跨表查询(python版)
  • Ruoyi-Cloud-Plus_Nacos配置服务漏洞CVE-2021-29441_官方解决方法以及_修改源码解决---SpringCloud工作笔记199
  • 和鲸科技与智谱AI达成合作,共建大模型生态基座
  • 计算机网络实验五
  • 通过 React 来构建界面
  • 真机调试,微信小程序,uniapp项目在微信开发者工具中真机调试,手机和电脑要连同一个wifi,先清空缓存,页面从登录页进入,再点真机调试,这样就不会报错了
  • vue3快速入门
  • go 问题记录(日志丢失)
  • 彻底解决 MAC Android Studio gradle async 时出现 “connect timed out“ 问题
  • 计算机网络第4章(网络层)