来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/the-number-of-weak-characters-in-the-game

题目描述

你正在参加一个多角色游戏,每个角色都有两个主要属性:攻击 和 防御 。给你一个二维整数数组 properties ,其中 properties[i] = [attacki, defensei] 表示游戏中第 i 个角色的属性。

如果存在一个其他角色的攻击和防御等级 都严格高于 该角色的攻击和防御等级,则认为该角色为 弱角色 。更正式地,如果认为角色 i 弱于 存在的另一个角色 j ,那么 attackj > attacki 且 defensej > defensei 。

返回 弱角色 的数量。

示例 1:

输入:properties = [[5,5],[6,3],[3,6]]
输出:0
解释:不存在攻击和防御都严格高于其他角色的角色。
示例 2:

输入:properties = [[2,2],[3,3]]
输出:1
解释:第一个角色是弱角色,因为第二个角色的攻击和防御严格大于该角色。
示例 3:

输入:properties = [[1,5],[10,4],[4,3]]
输出:1
解释:第三个角色是弱角色,因为第二个角色的攻击和防御严格大于该角色。

提示:

2 <= properties.length <= 105
properties[i].length == 2
1 <= attacki, defensei <= 105

解题思路

常规的暴力解题思路:

将角色两两互相比较就可以得出哪个是弱角色,但是根据提示样例规模很大,很容易超时。

优化解法:

将角色先根据攻击力来降序排序,对于攻击力相同的角色,将防御力升序排序,这样就可以保证已经遍历过的角色q防御值大于p时,攻击力一定也是大于p的,注意要使用&来避免复制次数,否则会超时,从前到后依次遍历角色,由于经过排序操作,前方的角色攻击力必然比后方的角色攻击力高,只需要记录前方防御力的最大值,如果后方角色防御力未大于这个最大值,那么必然是弱角色。

代码展示

class Solution {
public:
int numberOfWeakCharacters(vector<vector<int>>& properties) {
int iRet = 0, iMax = INT_MIN;
sort(properties.begin(), properties.end(), [](const vector<int> & a, const vector<int> & b) {
return a[0] == b[0] ? (a[1] < b[1]) : (a[0] > b[0]);
}); for(auto iter: properties)
{
if(iter[1] < iMax)
{
iRet++;
}
else
{
iMax = iter[1];
}
}
return iRet;
}
};

运行结果

最新文章

  1. php实现的笛卡儿积
  2. hdu 4006 The kth great number(优先队列)
  3. Android项目框架之图片加载框架的选择
  4. 解决uploadify多图片上传部分图片丢失,且不提示任何错误的问题
  5. SQLite使用教程10 运算符
  6. c# gzip解压缩
  7. Unity Navigation自动寻路
  8. js 报错 :object is not a function
  9. poj1742 多重背包的可行性问题
  10. 201521123067 《Java程序设计》第12周学习总结
  11. AngularJS学习篇(八)
  12. 巡风源码阅读与分析---Aider.py
  13. java开发师笔试面试每日12题(1)
  14. Python—UI自动化完整实战
  15. 深圳市共创力推出《以用户为中心的设计UCD方法与实战》课程!
  16. linux查看防火墙的状态以及开启关闭
  17. python模块分析之logging日志(四)
  18. 省一行是一行:在if语句中使用C# 7.0的模式匹配
  19. Java转义形如nbsp;的HTML编码
  20. Zabbix 更改监控项的应用级

热门文章

  1. Django测试脚本-单表操作(增删改查)-必知必会13条-神奇的双下划线
  2. JavaScript:输出语法
  3. go的grpc环境源码编译安装
  4. python3使用OCR识别图片
  5. Socket爬虫:Python版
  6. python之路43 JavaScript语法BOM与DOM jQuery对比 标签绑定事件
  7. FalseSharing-伪共享
  8. 移动端安卓开发学习记录--Android Studio使用adb链接夜神模拟器常用指令
  9. Xcode找不到.h或者.m文件解决办法 .h file not found
  10. windows消息处理机制