LeetCode 1996. The Number of Weak Characters in the Game
原题链接在这里:https://leetcode.com/problems/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
题解:
Sort the array based on attach asc first. If attach is equal, then on defend des.
From right, have the current max, if current defend is smaller, then we find one weak.
Why can't we do from left, one weak could be counted multiple times. e.g. (1, 2), (6,7), (7, 6). (1, 2) would be counted twice.
Time Complexity: O(nlogn). n = properties.length.
Space: O(1).
AC Java:
1 class Solution { 2 public int numberOfWeakCharacters(int[][] properties) { 3 Arrays.sort(properties, (a, b) -> a[0] == b[0] ? b[1] - a[1] : a[0] - b[0]); 4 int res = 0; 5 int max = Integer.MIN_VALUE; 6 for(int i = properties.length - 1; i >= 0; i--){ 7 if(properties[i][1] < max){ 8 res++; 9 } 10 11 max = Math.max(max, properties[i][1]); 12 } 13 14 return res; 15 } 16 }
AC C++:
1 class Solution { 2 public: 3 int numberOfWeakCharacters(vector<vector<int>>& properties) { 4 sort(properties.begin(), properties.end(), 5 [](const vector<int>& a, vector<int>& b) -> bool { 6 return a[0] == b[0] ? a[1] > b[1] : a[0] < b[0]; 7 }); 8 9 int maxDefense = INT_MIN; 10 int res = 0; 11 for(int i = properties.size() - 1; i >= 0; i--){ 12 if(properties[i][1] < maxDefense){ 13 res++; 14 } 15 16 maxDefense = max(maxDefense, properties[i][1]); 17 } 18 19 return res; 20 } 21 };
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合终身会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步