慕课Go开发工程师全新升级版内置源码文档

#1

download:慕课Go开发工程师全新升级版内置源码文档

文章参考 自学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%。
复制代码