download:开课吧高薪 webGL 工程师 2022 最新完结无密
文章参考 自学 it666 https://www.zxit666.com/
形容
你在玩一个蕴含多个角色的游戏,每个角色都有两个次要属性: 攻打和进攻。给你一个 2D 整数数组属性,其中 properties[i] = [attacki,defensei]代表游戏中第 I 个角色的属性。如果一个角色的攻打和进攻等级都比这个角色的攻打和进攻等级高很多,那么这个角色就被认为是弱的。更正式地说,如果存在另一个字符 j,其中 attackj > attacki 和 defensej > defensei,则称字符 I 是弱的。
返回弱字符的数量。
示例 1:
输出: 属性 = [[5,5],[6,3],[3,6]]
输入:0
阐明: 没有一个角色比另一个角色有更强的攻击力和防御力。
复制代码
示例 2:
输出: 属性 = [[2,2],[3,3]]
输入:1
阐明: 第一个角色很弱,因为第二个角色有更强的攻击力和防御力。
复制代码
留神:
2
属性 [i]。长度 == 2
一个
复制代码
剖析
依据题目,咱们正在玩一个有多个角色的游戏,每个角色有两个次要属性: 攻打和进攻。给定一个二维整数数组属性,其中 properties [i] = [attack,defense]代表第 I 个字符的属性。如果另一个角色的攻打和防具等级严格高于该角色的攻打和防具等级,则该角色被称为弱角色。更艰深地说,如果有另一个字符索引 J,其中 attackj > attacki,defence j > defence i,则索引为 I 的字符称为弱字符。返回弱角色的数量。
其实这个问题是对于排序的,AC 一次遍历就能够实现。咱们晓得问题须要弱字符的个数,所以咱们只须要数一数。我要判断的维度有两个维度: 攻击力和防御力,所以能够依照物理学中“控制变量法”的思路,先判断一个维度,再判断另一个维度。要达到这个“严格大于”的要求,首先要排序。咱们依照攻击力降序和防御力升序排序,这样在确定弱角色攻击力满足“严格小于”时,就能够通过判断弱角色防御力“严格小于”来找到弱角色。
而后咱们遍历属性。如果以后角色的攻击力小于之前穿梭过的角色,就不能判断是弱角色。因为防御力是不确定的,所以为了不便,咱们要用一个变量 max_defense 来记录被遍历角色的最大防御力,所以如果以后角色的防御力严格小于 max_defense,就阐明肯定是真角色,后果能够加一。
理论须要判断攻击力雷同但防御力严格小于前一个角色的状况。然而咱们的写法能够省去这个判断步骤,因为咱们是按防御力升序排序的,这样如果以后防御力严格小于之前的最大防御力,那么攻击力肯定是不相等的,因为攻击力相等时防御力是按升序排序的。
依照下面的办法,一次遍历后失去的后果就是最终后果,能够返回。工夫复杂度是 O(logN+N),N 是属性的长度,因为属性要先排序再遍历,空间复杂度是 O(1),因为没有开拓新的空间。
解释
类别解决方案 (对象):
def numberOfWeakCharacters(本身,属性):
“””
: 类型属性:List[List[int]]
:rtype: int
“””
properties . sort(key = lambda x:(-x[0],x[1]))
后果 = 最大进攻 = 0
对于_,属性中的进攻:
如果进攻 < 最大进攻:
后果 += 1
否则:
max_defense = 进攻
回送后果
复制代码
运行后果
运行工夫:2301 ms,比游戏中弱角色数量的 Python 在线提交快 84.75%。
内存应用:69.6 MB,不到 Python 在线提交的游戏中弱角色数量的 42.37%。
复制代码