• LeetCode每日一题(1996. The Number of Weak Characters in the Game)


    You are playing a game that contains multiple characters, and each of the characters has two main properties: attack and defense. You are given a 2D integer array properties where properties[i] = [attacki, defensei] represents the properties of the ith character in the game.

    A character is said to be weak if any other character has both attack and defense levels strictly greater than this character’s attack and defense levels. More formally, a character i is said to be weak if there exists another character j where attackj > attacki and defensej > defensei.

    Return the number of weak characters.

    Example 1:

    Input: properties = [[5,5],[6,3],[3,6]]
    Output: 0

    Explanation: No character has strictly greater attack and defense than the other.

    Example 2:

    Input: properties = [[2,2],[3,3]]
    Output: 1
    Explanation: The first character is weak because the second character has a strictly greater attack and defense.

    Example 3:

    Input: properties = [[1,5],[10,4],[4,3]]
    Output: 1

    Explanation: The third character is weak because the second character has a strictly greater attack and defense.

    Constraints:

    • 2 <= properties.length <= 105
    • properties[i].length == 2
    • 1 <= attacki, defensei <= 105

    1. 根据 attack 排序, 如果 attack 相同则按 defense 的倒序排序
    2. 反向遍历,时刻记录遍历过的最大的 defense 值, 如果 properties[i][1] < max(defense)则认为 properties[i]弱于前面便利过的某个 property

    之所以 attack 相同时按 defense 的倒序排序, 是因为题目要求是 attack 和 defense 都严格小于才能算弱, 我们这样排序可以保证 attack 是不严格递增, 按 defense 倒序排序可以保证在遍历的时候可以避免误把 attack 相同的情况计入答案中


    impl Solution {
        pub fn number_of_weak_characters(mut properties: Vec<Vec<i32>>) -> i32 {
            properties.sort_by(|v1, v2| {
                if v1[0] == v2[0] {
                    return v2[1].cmp(&v1[1]);
                }
                v1[0].cmp(&v2[0])
            });
            let mut max = properties.last().unwrap()[1];
            let mut ans = 0;
            for v in properties.into_iter().rev().skip(1) {
                if v[1] < max {
                    ans += 1;
                }
                max = max.max(v[1]);
            }
            ans
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
  • 相关阅读:
    SSM框架-获取容器的方式
    困扰已久的一个微信bug
    Hadoop Hdfs常用命令
    DockerFile打包项目实战解析,一文读懂dockerfile打包
    自学黑客(网络安全)技术——2024最新
    【MySql】13- 实践篇(十一)
    21年毕业,转行软件测试,薪资10K+,好运气都藏在你的实力里
    创造可持续价值的下一代
    LeetCode_733_图像渲染
    JSP共享自习室管理系统84w25--(程序+源码+数据库+调试部署+开发环境)
  • 原文地址:https://blog.csdn.net/wangjun861205/article/details/125426826