• 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
  • 相关阅读:
    01、MySQL-------性能优化
    STC8H8K64U I2C主机模式相关寄存器
    Spark基础:Scala内建控制结构
    TensorRt安装和命令行测试
    https
    微信小程序(一)
    冰冰学习笔记:泛型编程---模板简介
    JavaScript 62 JavaScript 版本 62.5 ECMAScript 2017
    #力扣:14. 最长公共前缀@FDDLC
    继续预训练对大语言模型的影响
  • 原文地址:https://blog.csdn.net/wangjun861205/article/details/125426826