按实力从高到低排序,实力相同防御力从低到高排序,从前向后遍历,只要发现当前防御力小于遍历过程中防御力最大值,就说明该人是一个弱角色,ans++。
这样排序可以保证该算法正确。
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 ans = 0;
int maxDef = 0;
for (auto & p : properties) {
if (p[1] < maxDef) {
ans++;
} else {
maxDef = p[1];
}
}
return ans;
}
};