题目大意:
题解:
对于攻击值相同的角色,我们按照其防御值从小到大进行排序且按照攻击值从大到小开始遍历,这样就可以保证当前已经遍历过的最大防御值角色\(q\)的防御值\(maxDef\)严格大于当前角色\(p\)的防御值时,则此时\(q\)的攻击值一定严格大于\(p\)的攻击值。因为相同的攻击值按照防御值从大到小进行排列,如果出现已经遍历过的角色\(q\)的防御值大于\(p\)的防御值,则此时我们可以肯定可以推理出角色\(q\)与角色\(p\)攻击值一定不相同。
class Solution {
public:
int numberOfWeakCharacters(vector<vector<int>>& properties) {
sort(properties.begin(), properties.end(), [](const vector<int>& a, const vector<int>& b) {
return a[0] == b[0] ? a[1] < b[1] : a[0] > b[0];
});
int maxDef = 0, ans = 0;
for (auto& p : properties) {
if (maxDef > p[1]) {
ans++;
} else {
maxDef = p[1];
}
}
return ans;
}
};