思路
简单的思路是暴力两重循环,但看数据范围
1
0
5
10^5
105暴力肯定超时;
所以考虑排序处理,因为要求严格高于,所以如果按普通排序,攻击相等的防御不好比较;
因为自定义排序规则,攻击降序排,攻击相同的防御升序排,这样攻击相同的,前者一定不强于后者;
用一个变量记录最大防御值,遍历,如果防御小于最大值,说明前面一定有强者,否则更新最大防御值;
因为攻击相同防御按降序排,所以不可能出现前者防御大于后者而攻击不大于后者的情况。
代码
class Solution {
public:
int numberOfWeakCharacters(vector<vector<int>>& properties) {
sort(properties.begin(), properties.end(), [](const auto& c0, const auto& c1) {
return c0[0] == c1[0] ? c0[1] < c1[1] : c0[0] > c1[0];
});
int n = properties.size();
int ans = 0;
int maxp = -0x0F0F0F0F;
for(int i = 0; i < n; i++) {
if(maxp > properties[i][1]) {
ans++;
}
else maxp = max(maxp, properties[i][1]);
}
return ans;
}
};