LeetCode-1996 游戏中弱角色的数量
来源:力扣(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;
    }
};
运行结果

LeetCode-1996 游戏中弱角色的数量的更多相关文章
- 问题 C: P4 游戏中的Human角色
		
题目描述 在一个平面打斗游戏中,任何的角色(Role)都有血量(blood)和位置loc(此处loc是Location类的实例)属性.有了Role类,可以派生出不同的角色,如人.神仙.怪兽等.如下程序 ...
 - YTU 2635: P4 游戏中的Human角色
		
2635: P4 游戏中的Human角色 时间限制: 1 Sec 内存限制: 128 MB 提交: 524 解决: 328 题目描述 在一个平面打斗游戏中,任何的角色(Role)都有血量(bloo ...
 - Unity优化方向——优化Unity游戏中的图形渲染(译)
		
CPU bound:CPU性能边界,是指CPU计算时一直处于占用率很高的情况. GPU bound:GPU性能边界,同样的是指GPU计算时一直处于占用率很高的情况. 原文:https://unity3 ...
 - UE4蓝图与C++交互——射击游戏中多武器系统的实现
		
回顾 学习UE4已有近2周的时间,跟着数天学院"UE4游戏开发"课程的学习,已经完成了UE4蓝图方面比较基础性的学习.通过UE4蓝图的开发,我实现了类似CS的单人版射击游戏,效 ...
 - 喵的Unity游戏开发之路 - 推球:游戏中的物理
		
很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此我们精选了一套国外优秀的Unity3D游戏开发教程,翻译整理后放送给大家,教您从零开始一步一步掌握Unity3D游戏开发. 本文不 ...
 - 游戏中的人工智能——初探AI
		
一.游戏中的人工智能 让游戏具有挑战性: 让游戏好玩的关键因素是为之找到合适的难度等级: 人工智能在游戏中的作用是通过提供富有挑战性的竞争对象来让游戏更好玩,而在游戏中行动逼真的非玩家角色(NPC), ...
 - 《MFC游戏开发》笔记十 游戏中的碰撞检测进阶:地图类型&障碍物判定
		
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9394465 作者:七十一雾央 新浪微博:http:// ...
 - 《MFC游戏开发》笔记九 游戏中的碰撞判定初步&怪物运动简单AI
		
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9374935 作者:七十一雾央 新浪微博:http:// ...
 - 论游戏中Buff的实现 [转]
		
论游戏中Buff的实现 分类: C/C++ 游戏开发2012-09-13 14:30 574人阅读 评论(6) 收藏 举报 c++游戏开发 源地址:http://blog.codingnow.com/ ...
 - C# Unity游戏开发——Excel中的数据是如何到游戏中的 (二)
		
本帖是延续的:C# Unity游戏开发——Excel中的数据是如何到游戏中的 (一) 上个帖子主要是讲了如何读取Excel,本帖主要是讲述读取的Excel数据是如何序列化成二进制的,考虑到现在在手游中 ...
 
随机推荐
- 为什么Git远程仓库中要配置公钥?
			
最近在使用阿里云效平台代码管理,首次使用新建仓库,使用SSH时需要配置公钥.之前也在GitHub.Gitee上配置过,每次都能正常使用,也没有思考过为什么要配置公钥.这次记录一下其中的原理. 本地和远 ...
 - 自研分布式高性能RPC框架及服务注册中心实践笔记【原创】【开源】
			
痛点 1. bsf底层依赖springcloud,影响bsf更新springboot新版本和整体最新技术版本升级. 2. eureka已经闭源,且框架设计较重,同时引入eureka会自行引入较多spr ...
 - 软件开发架构、构架趋势、OSI七层协议
			
目录 软件开发架构 构架总结 网络编程前戏 OSI七层协议简介 OSI七层协议值之物理连接层 OSI七层协议之数据链层 网络相关专业名词 OSI七层协议之网络层 IP协议: IP地址特征: IP地址分 ...
 - ArcObjects SDK开发 017 在ArcObject SDK 中使用Toolbox
			
1.Geoprocessor和IGPProcess Geoprocessor是ArcObjects SDK中定义Tool执行器.IGPProcess接口是ArcObjects SDK中定义的ArcTo ...
 - Safari浏览器对SVG中的<foreignObject>标签支持不友好,渲染容易错位
			
在 svg 中需要写一个 markdown 编辑器,需要用到 <foreignObject> 绘制来html,编辑器选择了 simplemde.大致html部分结构如下,<markd ...
 - c#5.0(.net 4.5之后)的 Async+await+Task的异步机制的调试笔记
			
1.)无返回值的情况(异步也是基于线程). using System; using System.Collections.Generic; using System.Linq; using Syste ...
 - .Net 6 使用 Consul 实现服务注册与发现 看这篇就够了
			
前言 在这几年的工作中,也经历过几个微服务项目,大多数都上了k8s,基本上都看不到Consul的身影,所以在工作之余折腾了下Consul,作为个人来讲还是得学习下,所以也就顺便通过文章来记录下学习过程 ...
 - 【大型软件开发】浅谈大型Qt软件开发(一)开发前的准备——在着手开发之前,我们要做些什么?
			
前言 最近我们项目部的核心产品正在进行重构,然后又是年底了,除了开发工作之外项目并不紧急,加上加班时间混不够了....所以就忙里偷闲把整个项目的开发思路聊一下,以供参考. 鉴于接下来的一年我要操刀这个 ...
 - [数据结构]克鲁斯卡尔(Kruskal)算法
			
算法的概念 与Prim算法从顶点开始扩展最小生成树不同,Kruskal算法是一种按权值的递增次序选择合适的边来构造最小生成树的方法.假设N=(V,E)是连通网,对应的最小生成树T=(Vt,Et),Kr ...
 - [cocos2d-x]用getContentSize()返回的值用CCLOG打印必须用%f
			
今天写代码,又遇到了一个bug,开始还以为是我自己哪写错了,没想到竟然在这里出错? 而width和height的类型是float类型,为什么必须用%d打印?接着我查看了一下源码: 如果没理解错的话,C ...