来源:力扣(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 游戏中弱角色的数量的更多相关文章

  1. 问题 C: P4 游戏中的Human角色

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

  2. YTU 2635: P4 游戏中的Human角色

    2635: P4 游戏中的Human角色 时间限制: 1 Sec  内存限制: 128 MB 提交: 524  解决: 328 题目描述 在一个平面打斗游戏中,任何的角色(Role)都有血量(bloo ...

  3. Unity优化方向——优化Unity游戏中的图形渲染(译)

    CPU bound:CPU性能边界,是指CPU计算时一直处于占用率很高的情况. GPU bound:GPU性能边界,同样的是指GPU计算时一直处于占用率很高的情况. 原文:https://unity3 ...

  4. UE4蓝图与C++交互——射击游戏中多武器系统的实现

    回顾   学习UE4已有近2周的时间,跟着数天学院"UE4游戏开发"课程的学习,已经完成了UE4蓝图方面比较基础性的学习.通过UE4蓝图的开发,我实现了类似CS的单人版射击游戏,效 ...

  5. 喵的Unity游戏开发之路 - 推球:游戏中的物理

    很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此我们精选了一套国外优秀的Unity3D游戏开发教程,翻译整理后放送给大家,教您从零开始一步一步掌握Unity3D游戏开发. 本文不 ...

  6. 游戏中的人工智能——初探AI

    一.游戏中的人工智能 让游戏具有挑战性: 让游戏好玩的关键因素是为之找到合适的难度等级: 人工智能在游戏中的作用是通过提供富有挑战性的竞争对象来让游戏更好玩,而在游戏中行动逼真的非玩家角色(NPC), ...

  7. 《MFC游戏开发》笔记十 游戏中的碰撞检测进阶:地图类型&障碍物判定

    本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9394465 作者:七十一雾央 新浪微博:http:// ...

  8. 《MFC游戏开发》笔记九 游戏中的碰撞判定初步&怪物运动简单AI

    本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9374935 作者:七十一雾央 新浪微博:http:// ...

  9. 论游戏中Buff的实现 [转]

    论游戏中Buff的实现 分类: C/C++ 游戏开发2012-09-13 14:30 574人阅读 评论(6) 收藏 举报 c++游戏开发 源地址:http://blog.codingnow.com/ ...

  10. C# Unity游戏开发——Excel中的数据是如何到游戏中的 (二)

    本帖是延续的:C# Unity游戏开发——Excel中的数据是如何到游戏中的 (一) 上个帖子主要是讲了如何读取Excel,本帖主要是讲述读取的Excel数据是如何序列化成二进制的,考虑到现在在手游中 ...

随机推荐

  1. React报错之Too many re-renders

    总览 产生"Too many re-renders. React limits the number of renders to prevent an infinite loop" ...

  2. 【Java面试指北】反射(1) 初识反射

    如果你被问到:什么是反射?为什么需要反射.以及反射的应用?你会如何回答呢? 本篇会带大家初识反射,了解反射概念和基本应用.反射的原理以及深入源码的探究将会在后面几篇介绍. 一.什么是反射? 要理解什么 ...

  3. js属性对象的hasOwnProperty( )方法,检测一个属性是否是对象的自有属性

    hasOwnProperty() 方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性(也就是,是否有指定的键). 语法: obj.hasOwnProperty(prop) 参数: prop  ...

  4. JavaScript:输入语法:prompt与confirm

    prompt prompt有两个参数: 第一个参数会显示在弹窗的输入框的上方: 第二个参数是可选的,会显示在输入框内,是一个初始值: 我们在输入框内输入的任何内容,都会作为返回值,返回给变量resul ...

  5. C/C++随堂笔记

    注释:行注释 块注释: (1)#if 0 #endif (2)/*     */ <>:表示系统文件 <stdlib.h>+syetem 调用windows中的程序 QT中 c ...

  6. Redis网络模型究竟有多强

    如果面试官问我:Redis为什么这么快? 我肯定会说:因为Redis是内存数据库!如果不是直接把数据放在内存里,甭管怎么优化数据结构.设计怎样的网络I/O模型,都不可能达到如今这般的执行效率. 但是这 ...

  7. .Net 7 的AOT的程序比托管代码更容易破解?

    楔子 .Net 7的一个重要功能是把托管的源码编译成Native Code,也就是二进制文件.此举看似增加了程序反编译难度,实际上是减少了程序的破解难度.本篇在不触及整个程序架构的前提下,以简单的例子 ...

  8. Kali Win-KeX SL

    内容: 概述 先决条件 用法 开始 声音支持 多屏支持 停止 概述 无缝模式下的 Win-KeX 将在 Windows 桌面的屏幕顶部启动 Kali Linux 面板. 通过面板启动的应用程序将与 M ...

  9. 洛谷P1259 黑白棋子的移动 题解

    本蒟蒻这题用的打表做法,其实也可以理解为是一种递推. 先来观察一下样例: 当n为7时,输出共有14行,易得输出行数为2n. ooooooo*******-- oooooo--******o* oooo ...

  10. 合并JSON文件

    下面是一段简单地代码 用来减少工作量合并代码 <!DOCTYPE html> <html lang="en"> <head> <meta ...