当前位置: 首页 > article >正文

算法随笔_57 : 游戏中弱角色的数量

上一篇:算法随笔_56: 好子数组的最大分数-CSDN博客

=====

题目描述如下:

你正在参加一个多角色游戏,每个角色都有两个主要属性:攻击 和 防御 。给你一个二维整数数组 properties ,其中 properties[i] = [attacki, defensei] 表示游戏中第 i 个角色的属性。

如果存在一个其他角色的攻击和防御等级 都严格高于 该角色的攻击和防御等级,则认为该角色为 弱角色 。更正式地,如果认为角色 i 弱于 存在的另一个角色 j ,那么 attackj > attacki 且 defensej > defensei 。

返回 弱角色 的数量。

示例 1:

输入:properties = [[5,5],[6,3],[3,6]]
输出:0
解释:不存在攻击和防御都严格高于其他角色的角色。

=====

算法思路:

这道题需要比较两个属性“攻击力”和“防御力”。我们可以先对“攻击力”属性对原数组进行升序排列。那么只要前面元素的“防御力”值小于后面元素的“防御力”值,我们就找到了一个弱角色。

我们可以使用“栈”的数据结构来维护“防御力”值。我们设数组stck为此栈,初始值为 stck=[properties[0][1]]。

当“防御力”值properties[i][1]小于stck[-1]栈顶时,properties[i][1]入栈。当properties[i][1]不断大于stck[-1],stck[-1]不断弹出。那么弹出的那些元素即为弱角色。

这道题还有一点需要注意,因为它要求严格大于。因此我们可以在排列原数组的时候,加一个限定条件,即,当元素之间的“攻击力”相同时,按“防御力”递减排列。

这样的话,如果出现元素 i 的“防御力”值大于栈顶的元素,那么这个元素 i 一定与栈顶的元素攻击力不同,且比它大。这样上面的算法就不会影响最终的结果。

下面是代码实现:

class Solution(object):
    def numberOfWeakCharacters(self, properties):
        """
        :type properties: List[List[int]]
        :rtype: int
        """
        p_len=len(properties)
        properties.sort(key=lambda x: (x[0], -x[1]))
        stck=[properties[0][1]]
        res=0
        for i in range(1, p_len):
            while stck and properties[i][1]>stck[-1]:
                res+=1
                stck.pop()   
            stck.append(properties[i][1])
        return res

关键词: 单调栈


http://www.kler.cn/a/559401.html

相关文章:

  • ES6 新特性,优势和用法?
  • 基于契约理论的竞争性组织数据共享安全激励机制matlab模拟与仿真
  • kube-proxy有什么作用?
  • 市场趋势中突破确认的多维度判断方法
  • uniapp实现移动端剪切板小功能
  • 【精调】LLaMA-Factory 快速开始2: Meta-Llama-3.1-8B-Instruct中文数据集
  • 基于范围选择的进化多目标优化PESA-II-可用于(汽车发动机多目标优化设计/飞机机翼多目标外形优化/电动汽车充电设施布局优化)
  • 【论文解读】《Training Large Language Models to Reason in a Continuous Latent Space》
  • Java即时通讯系统源码 - 仿QQ聊天-SpringBoot后台-JavaSwing桌面前端
  • 《操作系统 - 清华大学》 8 -5:进程管理:进程生命周期管理
  • [HOT 100] 2439. 最小化数组中的最大值
  • pikachu靶场搭建教程
  • Qt ModbusTCP和ModBusRTU读写数据
  • 运维linux日志面试题及参考答案
  • STM32-智能台灯项目
  • 【CS285】高斯策略对数概率公式的学习笔记
  • c语言左值和右值的区别
  • 【GPU驱动】- 状态机
  • CF 13A.Numbers(Java实现)
  • nodejs:vue 3 + vite 作为前端,将 html 填入<iframe>,在线查询英汉词典