1996_游戏中弱角色的数量

难度:中等

题目

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

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

返回 弱角色 的数量。

示例

示例一:

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

示例二:

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

示例三:

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

提示

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

解题

因为判定弱角色的条件为有人攻击力和防御力都比它高

所以按照攻击力从大到小排序,然后开始遍历,遍历过程中更新最高防御力。只要前面有比它防御力高的,则它是弱角色。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public int numberOfWeakCharacters(int[][] properties) {
int ans = 0;
Arrays.sort(properties, (a, b) -> a[0] == b[0] ? a[1] - b[1] : b[0] - a[0]);
int max = -1;
int n =properties.length;
for(int i=0;i<n;i++){
if(max>properties[i][1]){
ans++;
continue;
}
max = Math.max(max, properties[i][1]);
}
return ans;
}
}

关于 Java 的数组排序

Arrarys.sort() 是用于给数组排序的,默认的情况下,是顺序排序,即从小到大

在自定义比较器,重写compare方法时,return正值,返回后一个元素;return负值,返回前一个元素;return 0,两个元素顺序不变。

1
2
3
4
5
6
7
Arrays.sort(properties,(a,b)->{
if(a[0]==b[0]){
return a[1]-b[1];
}else{
return b[0]-a[0];
}
});