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

devtools/2024/9/24 6:39:10/

目录

力扣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/devtools/31816.html

相关文章

Electron开发 umi react 应用

Electron 是一个跨平台桌面端的应用框架&#xff0c;electron 底层依赖3 个核心组件 Chromium、Node.js、Electron API&#xff0c;Chromium 是 Chrome 的开源版本&#xff0c;Node.js可以编写后台应用程序&#xff0c;集成 Node.js 到 Electron&#xff0c;使得 Electron 可以…

P1094 [NOIP2007 普及组] 纪念品分组

传送门&#xff1a;P1094 [NOIP2007 普及组] 纪念品分组 一道裸贪心啊&#xff0c;没什么难度&#xff0c;就是证明比较麻烦&#xff0c;但是题解里写的听清楚的&#xff0c;就先不放了。 解法就是先排序&#xff0c;然后定义两个指针&#xff0c;指向数组的头和尾&#xff0c…

深度学习之基于Matlab BP神经网络烟叶成熟度分类

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 烟叶的成熟度是评估烟叶品质的重要指标之一&#xff0c;它直接影响着烟叶的口感、香气和理化特性。传…

华为平板手机如何清理应用市场的存储空间

如何清理应用市场的存储空间 适用产品&#xff1a; 手机&#xff0c;平板 适用版本&#xff1a;不涉及系统版本 如果您的应用市场显示应用的数据较大&#xff0c;可能是下载的安装包没有安装成功&#xff0c;导致安装包未自动删除。&#xff08;可参考&#xff1a;应用市场下…

FANUC机器人SOCKET断开KAREL程序编写

一、添加一个.KL文件创建编辑断开指令 添加一个KL文件用来创建karel程序中socket断开指令 二、断开连接程序karel代码 PROGRAM SOC_DIS %COMMENT SOCKET断开 %INCLUDE klevccdf VAR str_input,str_val : STRING[20] status,data_type,int_val : INTEGER rel_val : REALBEGING…

这是一个简单的照明材料网站,后续还会更新

1、首页效果图 代码 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>爱德照明网站首页</title><style>/*外部样式*/charset "utf-8";*{margin: 0;padding: 0;box-sizing: border-box;}a{text-dec…

Content type ‘application/json;charset=UTF-8‘ not supported异常的解决过程

1.首先说明开发场景 *就是对该json格式数据传输到后台 后台实体类 import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import org.sp…

二叉树:数据结构的分形之美

1.树形结构 1.1概念 树是一种非线性的数据结构&#xff0c;它是由n(n>0)个有限结点组成一个具有层次关系的集合。把他叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就说它的根朝上&#xff0c;而叶朝下的。它具有以下的特点&#xff1a; 有一个特殊的节点&#xff0…