1996.游戏中的弱角色的数量
难度:中等
目录
一、问题描述
二、思想
1、解题思想
三、解题
1、代码实现
2、时间复杂度 and 空间复杂度
四、总结
一、问题描述
这里直接采用的是LeetCode上面的问题描述。
你正在参加一个多角色游戏,每个角色都有两个主要属性:攻击 和 防御 。给你一个二维整数数组 properties ,其中 properties[i] = [attacki, defensei] 表示游戏中第 i 个角色的属性。
如果存在一个其他角色的攻击和防御等级 都严格高于 该角色的攻击和防御等级,则认为该角色为 弱角色 。更正式地,如果认为角色 i 弱于 存在的另一个角色 j ,那么 attackj > attacki 且 defensej > defensei 。
返回 弱角色 的数量。
下面给出示例:
提示:
- 2 <= properties.length <= 105
- properties[i].length == 2
- 1 <= attacki, defensei <= 105
二、思想
1、解题思想
对于每个角色,都要进行判断是否存在一个 攻击力 和 防御力 都 严格大于 他的角色,从而确定该角色是否为 弱角色 。我们可以按角色的某个属性(比如攻击值)从大到小的顺序遍历,同时记录已经遍历过的角色的 最大防御力 maxDefensive。对于当前角色 a,如果 b 的防御值严格小于 maxDefensive,那么说明存在防御值比 b 高的角色(记作 a),如果此时 a 的攻击值也严格大于 b,则可以确定 b 为 弱角色。
怎么解决 a 的 攻击力 严格大于 b ,接下来就要对 攻击力相同的角色 进行分组,将 攻击力相等的为一组,并且攻击力相等的 防御力 按照从小到大排序,这样每次更新 maxDefensive 时 不会统计 攻击力相等的角色为 弱角色,那么当角色 b 的攻击力 严格小于 角色 a 的攻击力时,角色 b 相同的攻击力的角色 防御力也是 按照从小到达排序的,此时如果 角色b 的防御力< maxDefensive 那么可以推断出 b为 弱角色。
这里解决的就是 对所有角色进行攻击力递减排序,并对攻击力相同的角色 按照防御力进行递增排序。
需要使用 sort 函数 自己写 cmp参数。
//攻击力相同的话 按照防御力从小到大排序//攻击力不同的话 按照攻击力从大到小排序sort(properties.begin(),properties.end(),[](vector<int>& a,vector<int>& b){return a[0] == b[0] ? (a[1]<b[1]) : a[0]>b[0];});
这里的 a[0] 、b[0] ,表示攻击力, a[1]、b[1],表示防御力。
这里介绍一下 cmp 参数:
cmp参数 中有两个元素 进行比较,为了区分我这里:
- 参数 a 作为左边参数
- 参数 b 作为右边参数
为了方便理解这里统一:a 在比较符号左边,b 在比较符号右边。
- a<b 意思为递减
- a>b意思为递增
完成排序之后就比较好操作了。
对于 cmp参数 怎么理解这里给出代码,可以自己复制下来运行去理解:
#include"leetcode.h"struct nums{int a;int b;int c;
}n[10];// 左边 < 右边 是从小到大
bool cmp1(nums a, nums b) {if (a.a == b.a) {if (a.b == b.b) {return a.c < b.c;}else {return a.b < b.b;}}return a.a < b.a;
}
//优先按照a从小到大排序,其次按照b从小到大排序,最后按照c从小到大排序//左边 > 右边 是从大到小
bool cmp2(nums a, nums b) {if (a.a == b.a) {if (a.b == b.b) {return a.c > b.c;}else {return a.b > b.b;}}return a.a > b.a;
}
//优先按照a从大到小排序,其次按照b从大到小排序,最后按照c从大到小排序
int main() {n[0].a = 1; n[0].b = 4; n[0].c = 5;n[1].a = 2; n[1].b = 6; n[1].c = 7;n[2].a = 3; n[2].b = 5; n[2].c = 7;n[3].a = 6; n[3].b = 6; n[3].c = 1;n[4].a = 2; n[4].b = 5; n[4].c = 3;n[5].a = 7; n[5].b = 2; n[5].c = 2;n[6].a = 1; n[6].b = 5; n[6].c = 3;n[7].a = 7; n[7].b = 6; n[7].c = 3;n[8].a = 2; n[8].b = 3; n[8].c = 4;n[9].a = 2; n[9].b = 4; n[9].c = 5;sort(n, n + 7, cmp2);for (auto item : n) {cout << item.a << " " << item.b << " " << item.c << endl;}system("pause");return 0;
}
调用 cmp1 时:
调用 cmp2 时:
三、解题
1、代码实现
class Solution {
public:int numberOfWeakCharacters(vector<vector<int>>& properties) {//攻击力相同的话 按照防御力从小到大排序//攻击力不同的话 按照攻击力从大到小排序//容器cmp 取引用可以提升效率,在leetcode 提交平台不取引用会超时⭐⭐⭐⭐⭐sort(properties.begin(),properties.end(),[](vector<int>& a,vector<int>& b){return a[0] == b[0] ? (a[1]<b[1]) : a[0]>b[0];});int maxDefensive = 0;int ans = 0;//容器cmp 取引用可以提升效率,在leetcode 提交平台不取引用会超时⭐⭐⭐⭐⭐for(auto& item : properties){if(item[1] < maxDefensive){ans++;}else{maxDefensive = item[1];}}return ans;}
};
2、时间复杂度 and 空间复杂度
时间复杂度: ,n 为数组的长度,为排序使用的时间。
空间复杂度:,n为数组长度,排序使用的栈的空间为。
四、总结
学会了 sort(x,y,cmp),中的 cmp参数的书写,sort() 函数还是很强大的,可以自己构造排序方法,对于这题来说主要就是会自己构造cmp 对所有角色进行排序,最后判断 防御力 即可。
如果对你有什么帮助,请star ♥ 一下,收藏一下,蟹蟹啦!
1996.游戏中的弱角色的数量相关推荐
- 2022.1.28 力扣-每日一题-游戏中弱角色的数量
题目描述: 你正在参加一个多角色游戏,每个角色都有两个主要属性:攻击 和 防御 .给你一个二维整数数组 properties ,其中 properties[i] = [attacki, defense ...
- 如何利用Shader来渲染游戏中的3D角色
杨航最近在学Unity3D 本文主要介绍一下如何利用Shader来渲染游戏中的3D角色,以及如何利用Unity提供的Surface Shader来书写自定义Shader. 一.从Shader开始 ...
- 游戏脚本在移动游戏设计中的作用_关卡设计师谈游戏中的敌对角色设计Monster Design...
原作者:Emil Glans 关卡设计是一门非常广泛的学科,不仅涵盖了基础几何学.脚本中的事件&敌人设计,还涉及到不同部分的组合.紧张度调节和叙事.在本文中,我将重点讨论一些与核心游戏设计密切 ...
- [YTU]_2635(P4 游戏中的Human角色)
题目描述 在一个平面打斗游戏中,任何的角色(Role)都有血量(blood)和位置loc(此处loc是Location类的实例)属性.有了Role类,可以派生出不同的角色,如人.神仙.怪兽等.如下程序 ...
- 游戏开发中的各种角色浅析
在以往的游戏开发中,我们往往需要处理很多角色,围绕着这些角色的组织形式,解耦等话题,出现了很多复合设计模式.例如:pureMVC,MVVM ,MVC 等等.对于这些设计模式,都是有利有弊,有他自己的使 ...
- 如何铸造游戏中的NFT游戏角色
Web3 领域中有许多令人兴奋的领域.然而,NFT 仍然风靡一时.如您所知,2021 年 NFT 出现了巨大的增长,它们的众多用例开始出现.因此,NFT 游戏浮出水面,让程序员将全部注意力转向 NFT ...
- MIT教授: 世界就是《黑客帝国》,人类在模拟游戏中扮演角色
转载于 新智元 编辑:元子 MIT教授认为我们目前有50%-100%的概率生活在<黑客帝国>那样的计算机模拟世界中,所谓现实可能不过是一种幻觉.而距离我们创建自己的模拟世界,最多需 ...
- 从游戏中学习产品设计2:消费篇
上一期,我们介绍了游戏中的诱导充值套路,没有看的朋友可点击 从游戏中学习产品设计1:充值篇!了解游戏中是如何引诱玩家充值的,今天我们来聊一聊游戏中的消费套路,上文介绍了游戏中的三类货币:金币,钱币和时 ...
- 游戏中的网络同步机制(二) 王者荣耀对帧同步的应用
转载自:https://www.jianshu.com/p/81050871cce7 参考 解密:腾讯如何打造一款实时对战手游 从<王者荣耀>来聊聊游戏的帧同步 <王者荣耀>技 ...
最新文章
- mysql数据库blob区别_MySQL中TEXT与BLOB字段类型的区别
- pandas 排序 给excel_懂Excel轻松入门Python数据分析包pandas(二十五):循环序列分组...
- Mac用户SVN图形界面推荐
- fft的c语言和matlab对比_Matlab系列之程序控制
- QTP自动化测试框架的基础知识
- MySQL基础总结(三)
- android 仿京东地址选择_Android 开发:仿美团地址选择
- GStreamer基础教程07 - 播放速率控制
- linux的命令窗口,(翻译)Linux命令行(二)
- hue集成mysql报错_CDH5.7Hue使用sqoop导出mysql数据报错
- 关于DHCP超级域与中继代理的疑问
- 初探内联方式的 onload=doSomething()为何要加()?而js代码的 onload=doSomething 和 addEventListener 为何不加()?...
- LIstView和TreeView相关联
- CAD图形的缩放——放大镜
- CSS 字体大小 font-size属性
- Unity 3D基础入门编程_艾孜尔江撰稿
- python余弦定理求角_python余弦定理计算相似度
- Mac出现异常,如何在M1或Intel Mac上重置NVRAM
- 八爪鱼采集百度地图坐标店铺视频教程
- 阿里短信服务 JAVA
热门文章
- 对话阿里云李飞飞:云原生数据库的时代来了
- 实战 | 对抗外部威胁防护和勒索病毒,大厂怎么做?
- 华为 P40 “一胞三胎”,最贵价 10854 元
- 定了!百度运维工程师非法挖矿获利 10 万、被判 3 年,如何避免面向监狱编程?...
- 40 道数据挖掘面试真题大放送!
- 漫画 | 如何获得关系数据库王国的永久居住权?
- 划重点!Android 11 首个开发者预览版新功能抢先看
- 达摩院 2020 预测:感知智能的“天花板”和认知智能的“野望”
- 高薪、稀缺人才必备哪些技能?BDTC大会告诉你,附最新议程!
- 2020 年物联网设备达 500 亿台!AI、区块链技术加持,优秀开发者稀缺!