你正在参加一个多角色游戏,每个角色都有两个主要属性:攻击 和 防御 。给你一个二维整数数组 properties ,其中 properties[i] = [attacki, defensei] 表示游戏中第 i 个角色的属性。
如果存在一个其他角色的攻击和防御等级 都严格高于 该角色的攻击和防御等级,则认为该角色为 弱角色 。更正式地,如果认为角色 i 弱于 存在的另一个角色 j ,那么 attackj > attacki 且 defensej > defensei 。
返回 弱角色 的数量。
这个题目,我们要确定的是,“弱角色“的定义是有人攻击防御都比你强,那么我们可以根据攻击力降序排列,同时防御力升序排列,那么就可以确保一件事,也就是如果你前面的角色防御力比你大,那么攻击力也一定比你大(如果攻击力一样,防御力小的在前面,不会出现这种情况),这样所有比当前角色防御力大的,攻击力也一定比当前角色大,这样统计弱角色个数就可以了
class Solution {
public int numberOfWeakCharacters(int[][] properties) {
// 先按攻击力排序(降序),再按防御力升序
//然后遍历,记录前面最大的防御力
Arrays.sort(properties, (a, b) -> a[0] == b[0] ? a[1] - b[1] : b[0] - a[0]);
//遍历,第一个攻击力最大,用他的防御力初始化maz
//后面的角色防御力比max小,那么前面角色都比它攻击力高
//还有角色防御力比他高,当前角色就是弱角色
int ans = 0, max = properties[0][1];
for (int i = 1; i <properties.length; i++) {
if (properties[i][1] < max) {
ans++;
} else {
max = properties[i][1];
}
}
return ans;
}
}