每日OJ题_贪心算法二⑤_力扣870. 优势洗牌(田忌赛马)

embedded/2024/10/19 7:29:56/

目录

力扣870. 优势洗牌(田忌赛马)

解析代码


力扣870. 优势洗牌(田忌赛马)

870. 优势洗牌

 难度 中等

给定两个长度相等的数组 nums1 和 nums2nums1 相对于 nums2 的优势可以用满足 nums1[i] > nums2[i] 的索引 i 的数目来描述。

返回 nums1 的任意排列,使其相对于 nums2 的优势最大化。

示例 1:

输入:nums1 = [2,7,11,15], nums2 = [1,10,4,11]
输出:[2,11,7,15]

示例 2:

输入:nums1 = [12,24,8,32], nums2 = [13,25,32,11]
输出:[24,32,8,12]

提示:

  • 1 <= nums1.length <= 10^5
  • nums2.length == nums1.length
  • 0 <= nums1[i], nums2[i] <= 10^9
class Solution {
public:vector<int> advantageCount(vector<int>& nums1, vector<int>& nums2) {}
};

解析代码

这里讲一下田忌赛马背后的博弈决策,从三匹马拓展到 n 匹马之间博弈的最优策略。

  • 田忌:下等马 中等马 上等马
  • 齐王:下等马 中等马 上等马
  1. 田忌的下等马 pk 不过齐王的下等马,因此把这匹马丢去消耗一个齐王的最强的马。
  2. 接下来选择中等马 pk 齐王的下等马,勉强获胜。
  3. 最后用上等马 pk 齐王的中等马,勉强获胜。

由此可以得出一个最优的决策方式:

  • 当我方此时最差的比不过对面最差的时候,让我方最差的去处理掉对面最好的(反正要输,不如去拖掉对面一个最强的)。
  • 当我方此时最差的能比得上对面最差的时候,就让两者比对下去(最差的都能获胜,就不需要更强的比了)。
class Solution {
public:vector<int> advantageCount(vector<int>& nums1, vector<int>& nums2) {int sz = nums1.size();sort(nums1.begin(), nums1.end());vector<int> index(sz), ret(sz); // index和nums2下标绑定for(int i = 0; i < sz; ++i){index[i] = i;}sort(index.begin(), index.end(),[&](int index1, int index2){return nums2[index1] < nums2[index2];});int left = 0, right = sz - 1;for(auto& e : nums1){if(e <= nums2[index[left]]) // 最弱的和最弱的判断ret[index[right--]] = e; // 比不过就去和最强的比,相等也比不过else // 比过了,放到最弱的位置ret[index[left++]] = e;}return ret;}
};


http://www.ppmy.cn/embedded/35446.html

相关文章

游戏辅助 -- 某游戏一键端配置

游戏一键端下载地址及安装视频&#xff1a; https://pan.quark.cn/s/e6a373d94707 ​https://pan.quark.cn/s/ef7ab0c48776 准备工作 Vmware虚拟机软件&#xff1a;用于创建和管理虚拟机。 SecureCRT&#xff1a;一款支持SSH的终端仿真程序&#xff0c;用于远程登陆服务器…

MySQL的Checkpoint创建时机

MySQL的Checkpoint是InnoDB存储引擎用来确保数据完整性和高效恢复的一个机制。Checkpoint发生时&#xff0c;InnoDB会将内存中的脏页&#xff08;即已经被修改但尚未写入磁盘的数据页&#xff09;写入磁盘。这个过程对于减少数据库崩溃恢复时间和确保数据一致性至关重要。 Che…

智能Agent:未来社会的角色、发展路径与挑战

​​​​​​​ 随着人工智能技术的不断发展&#xff0c;智能Agent已经成为了我们生活中越来越重要的一部分。从智能助手到自动驾驶汽车&#xff0c;再到语音助手和智能家居系统&#xff0c;智能Agent正在以多种形式渗透到我们的日常生活中。但随着Agent AI的智能化水平不断提…

【网心云邀请码:KpyV3Dk7】轻松赚油费,新用户专享福利来袭!绑定设备连续在线7 天必得高额奖励

&#x1f4e2; 各位朋友们&#xff0c;好消息来啦&#xff01;现在注册网心云&#xff0c;通过我们的专属邀请码&#xff1a;KpyV3Dk7 &#xff0c;即可享受多重新手福利&#xff0c;让您的闲置设备为您赚钱&#xff01; &#x1f4b8; 立即加入&#xff0c;您将获得&#xff1…

双重检验锁方式实现单例模式

单例模式&#xff08;Singleton Pattern&#xff09;&#xff1a;是指在内存中只会创建且仅创建一次对象的设计模式。在程序中多次使用同一个对象且作用相同时&#xff0c;为了防止频繁地创建对象使得内存飙升&#xff0c;单例模式可以让程序仅在内存中创建一个对象&#xff0c…

若依分离版-前端使用echarts组件

1 npm list:显示已安装的模块 该命令用于列出当前项目的所有依赖关系&#xff0c;包括直接依赖和间接依赖。执行 npm list 时&#xff0c;npm 将从当前目录开始&#xff0c;递归地列出所有已安装的模块及其版本信息 npm list 2 npm outdated:用于检查当前项目中的npm包是否有…

关于 win11 系统下12代/13代英特尔大小核架构 CPU 的 VMware 优化:输入延迟、卡顿,大小核调度

关于 win11 系统下12代/13代英特尔大小核架构 CPU 的 VMware 优化&#xff1a;输入延迟、卡顿&#xff0c;大小核调度 一、前言二、VMware 的优化2.1 键鼠输入延迟问题的解决2.1.1 搜索内核隔离2.1.2 关闭内存完整性并重启2.1.3 搜索启用或关闭windows功能2.1.4 关闭 hyper-v 和…

BJFUOJ-C++程序设计-实验2-类与对象

A 评分程序 答案&#xff1a; #include<iostream> #include<cstring>using namespace std;class Score{ private:string name;//记录学生姓名double s[4];//存储4次成绩&#xff0c;s[0]和s[1]存储2次随堂考试&#xff0c;s[2]存储期中考试&#xff0c;s[3]存储期…