leetcode每日一题1996. 游戏中弱角色的数量 排序+遍历 实则是对lambda表达式的复习同时也是对贪心的复习

📖本篇内容:leetcode每日一题1996. 游戏中弱角色的数量 排序+遍历 实则是对lambda表达式的复习

📑 文章专栏:leetcode每日一题《打卡日常》

📆 最近更新:2022年1月27日 leetcode每日一题2047. 句子中的有效单词数~ 简单的字符串匹配

🙊个人简介:一只二本院校在读的大三程序猿,本着注重基础,打卡算法,分享技术作为个人的经验总结性的博文博主,虽然可能有时会犯懒,但是还是会坚持下去的,如果你很喜欢博文的话,建议看下面一行~(疯狂暗示QwQ)

🌇 点赞 👍 收藏 ⭐留言 📝 一键三连 关爱程序猿,从你我做起

🙊写在前面🙊

今天陪母亲大人出去剪了个头发的,看着我日渐稀疏的脑阔顶,不仅落下了悔恨的泪水,看着镜子中,逐渐秃顶的我,默默地叹了口气,写了这篇令人还掉不了头发的中等题~

题目

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

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

返回 弱角色 的数量。

示例

示例1:

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

示例2:

输入:properties = [[2,2],[3,3]]
输出:1
解释:第一个角色是弱角色,因为第二个角色的攻击和防御严格大于该角色。

提示

2 <= properties.length <= 10^5
properties[i].length == 2
1 <= attacki, defensei <= 10^5

📝思路📝

当我们拿到这种题时首先第一步要读懂题弱角色的存在条件就是,该角色的所有属性比另一个人的所有属性都要低,就是弱角色,那如果两个人攻击力相同时,他们之间就不会产生弱角色,那当前如果攻击力相同时防御力越拉胯的人是不是越容易被破防被比他攻击力高一点的兄弟给干死成弱角色呢,思路有了,那咱们就来看看如何进行解决。

⭐代码实现⭐

class Solution {
    public int numberOfWeakCharacters(int[][] properties) {
        //用于记录角色个数 n
        int n = properties.length;
        //将角色能力进行排序 如果 角色之间的攻击力相同 则将 防御力较低的排到前面 反之 攻击力按照降序排序
        Arrays.sort(properties,(role1,role2)->role1[0]==role2[0]? role1[1] - role2[1] : role2[0]-role1[0]);
        //用于记录当前 弱角色 人数
        int weakRoleCount = 0;
        //记录当前防御力能破防的最大值
        int defenseMax = Integer.MIN_VALUE;
        for (int i = 0 ; i< n;i++){
            //如果能破防则弱角色+1
            if (defenseMax > properties[i][1]){
                weakRoleCount++;
            }
            //记录最大破防值
            defenseMax = Math.max(defenseMax,properties[i][1]);
        }
        return weakRoleCount;
    }
}

运行结果

在这里插入图片描述

🙊写在最后🙊

2022-1-28 今天小付打卡了哦~

美好的日出 美好的山河

都因有你存在 而璀璨 耀眼

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alascanfu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值