前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >力扣1996. 游戏中弱角色的数量(#Day22)

力扣1996. 游戏中弱角色的数量(#Day22)

作者头像
才浅Coding攻略
发布2022-12-12 17:57:34
1280
发布2022-12-12 17:57:34
举报
文章被收录于专栏:才浅coding攻略才浅coding攻略

力扣1996. 游戏中弱角色的数量

题目中对于弱角色的定义是:如果存在一个其他角色的攻击和防御均高于该角色,则这个角色是弱角色。我的想法是用哈希表的键来存储攻击力,哈希表的值用一个列表存放防御力,然后根据攻击力进行排序,并记录当前最高的防御力。由于攻击力已经按从大到小排好,那么找弱角色的逻辑就是只要这个角色的防御力比最大防御力小(伤害溢出),就满足弱角色,计数加一。

代码语言:javascript
复制
from typing import List
from collections import defaultdict


def numberOfWeakCharacters(properties: List[List[int]]) -> int:
    res = 0
    prop_map = defaultdict(list)
    max_defence = 0
    # {攻击力:[防御力,]}
    for attack, defence in properties:
        prop_map[attack].append(defence)
    # 按攻击力对哈希表排序
    for attack in sorted(prop_map, reverse=True):
        for defence in prop_map[attack]:
            if defence < max_defence:
                res += 1
        # 维护最大防御力
        max_defence = max(max_defence, max(prop_map[attack]))
    return res


properties = [[1, 5], [10, 4], [4, 3], [1, 2]]
print(numberOfWeakCharacters(properties))  # 2

还可以使用排序+双指针来实现,先给properties安排一波原地排序,按攻击力和防御力由大到小。一个指针用来遍历角色并维护当前遍历到的攻击力(之前最高的防御力),另一个指针维护与第一个指针攻击力相同的怪的防御力(当前攻击力下的防御力),统计弱角色的个数。

代码语言:javascript
复制
def double_pointer_solution(properties: List[List[int]]) -> int:
    properties.sort(key=lambda x: (-x[0], -x[1]))  # 按攻击力由大到小,按防御力由大到小
    res = 0
    max_defence = 0
    i = 0
    while i < len(properties):  # i指针遍历角色的攻击力
        j, cur_max, max_defence = i, max_defence, max(
            max_defence, properties[i][1])  # 取当前最大防御力和该角色防御力间的最大值
        # j指针在攻击力相等的情况维护当前攻击力下的防御力
        while j < len(properties) and properties[j][0] == properties[i][0]:
            if properties[j][1] < cur_max:
                res += 1  # 满足伤害溢出
            j += 1
        i = j
    return res


properties = [[1, 5], [10, 4], [4, 3], [1, 2]]
print(double_pointer_solution(properties))  # 2

END

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-01-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 才浅coding攻略 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档