难度:中等

目录

一、问题描述

二、思想

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.游戏中的弱角色的数量相关推荐

  1. 2022.1.28 力扣-每日一题-游戏中弱角色的数量

    题目描述: 你正在参加一个多角色游戏,每个角色都有两个主要属性:攻击 和 防御 .给你一个二维整数数组 properties ,其中 properties[i] = [attacki, defense ...

  2. 如何利用Shader来渲染游戏中的3D角色

    杨航最近在学Unity3D 本文主要介绍一下如何利用Shader来渲染游戏中的3D角色,以及如何利用Unity提供的Surface Shader来书写自定义Shader. 一.从Shader开始 ...

  3. 游戏脚本在移动游戏设计中的作用_关卡设计师谈游戏中的敌对角色设计Monster Design...

    原作者:Emil Glans 关卡设计是一门非常广泛的学科,不仅涵盖了基础几何学.脚本中的事件&敌人设计,还涉及到不同部分的组合.紧张度调节和叙事.在本文中,我将重点讨论一些与核心游戏设计密切 ...

  4. [YTU]_2635(P4 游戏中的Human角色)

    题目描述 在一个平面打斗游戏中,任何的角色(Role)都有血量(blood)和位置loc(此处loc是Location类的实例)属性.有了Role类,可以派生出不同的角色,如人.神仙.怪兽等.如下程序 ...

  5. 游戏开发中的各种角色浅析

    在以往的游戏开发中,我们往往需要处理很多角色,围绕着这些角色的组织形式,解耦等话题,出现了很多复合设计模式.例如:pureMVC,MVVM ,MVC 等等.对于这些设计模式,都是有利有弊,有他自己的使 ...

  6. 如何铸造游戏中的NFT游戏角色

    Web3 领域中有许多令人兴奋的领域.然而,NFT 仍然风靡一时.如您所知,2021 年 NFT 出现了巨大的增长,它们的众多用例开始出现.因此,NFT 游戏浮出水面,让程序员将全部注意力转向 NFT ...

  7. MIT教授: 世界就是《黑客帝国》,人类在模拟游戏中扮演角色

      转载于 新智元   编辑:元子 MIT教授认为我们目前有50%-100%的概率生活在<黑客帝国>那样的计算机模拟世界中,所谓现实可能不过是一种幻觉.而距离我们创建自己的模拟世界,最多需 ...

  8. 从游戏中学习产品设计2:消费篇

    上一期,我们介绍了游戏中的诱导充值套路,没有看的朋友可点击 从游戏中学习产品设计1:充值篇!了解游戏中是如何引诱玩家充值的,今天我们来聊一聊游戏中的消费套路,上文介绍了游戏中的三类货币:金币,钱币和时 ...

  9. 游戏中的网络同步机制(二) 王者荣耀对帧同步的应用

    转载自:https://www.jianshu.com/p/81050871cce7 参考 解密:腾讯如何打造一款实时对战手游 从<王者荣耀>来聊聊游戏的帧同步 <王者荣耀>技 ...

最新文章

  1. mysql数据库blob区别_MySQL中TEXT与BLOB字段类型的区别
  2. pandas 排序 给excel_懂Excel轻松入门Python数据分析包pandas(二十五):循环序列分组...
  3. Mac用户SVN图形界面推荐
  4. fft的c语言和matlab对比_Matlab系列之程序控制
  5. QTP自动化测试框架的基础知识
  6. MySQL基础总结(三)
  7. android 仿京东地址选择_Android 开发:仿美团地址选择
  8. GStreamer基础教程07 - 播放速率控制
  9. linux的命令窗口,(翻译)Linux命令行(二)
  10. hue集成mysql报错_CDH5.7Hue使用sqoop导出mysql数据报错
  11. 关于DHCP超级域与中继代理的疑问
  12. 初探内联方式的 onload=doSomething()为何要加()?而js代码的 onload=doSomething 和 addEventListener 为何不加()?...
  13. LIstView和TreeView相关联
  14. CAD图形的缩放——放大镜
  15. CSS 字体大小 font-size属性
  16. Unity 3D基础入门编程_艾孜尔江撰稿
  17. python余弦定理求角_python余弦定理计算相似度
  18. Mac出现异常,如何在M1或Intel Mac上重置NVRAM
  19. 八爪鱼采集百度地图坐标店铺视频教程
  20. 阿里短信服务 JAVA

热门文章

  1. 对话阿里云李飞飞:云原生数据库的时代来了
  2. 实战 | 对抗外部威胁防护和勒索病毒,大厂怎么做?
  3. 华为 P40 “一胞三胎”,最贵价 10854 元
  4. 定了!百度运维工程师非法挖矿获利 10 万、被判 3 年,如何避免面向监狱编程?...
  5. 40 道数据挖掘面试真题大放送!
  6. 漫画 | 如何获得关系数据库王国的永久居住权?
  7. 划重点!Android 11 首个开发者预览版新功能抢先看
  8. 达摩院 2020 预测:感知智能的“天花板”和认知智能的“野望”
  9. 高薪、稀缺人才必备哪些技能?BDTC大会告诉你,附最新议程!
  10. 2020 年物联网设备达 500 亿台!AI、区块链技术加持,优秀开发者稀缺!