1996. 游戏中弱角色的数量(排序贪心)
题目描述
你正在参加一个多角色游戏,每个角色都有两个主要属性:攻击 和 防御 。给你一个二维整数数组 properties ,其中 properties[i] = [attacki, defensei] 表示游戏中第 i 个角色的属性。
如果存在一个其他角色的攻击和防御等级 都严格高于 该角色的攻击和防御等级,则认为该角色为 弱角色 。更正式地,如果认为角色 i 弱于 存在的另一个角色 j ,那么 attackj > attacki 且 defensej > defensei 。
返回 弱角色的数量。
题目解析
将所有角色按照第一关键字 从大到小 排序,第一关键字相同的,按照第二关键字 从小到大 排序。
排序后,遍历整个数组,并记录当前最大的第二关键字。如果当前角色的第二关键字小于最大的第二关键字,则当前角色必定是弱角色。
Code
class Solution { public: int numberOfWeakCharacters(vector<vector<int>>& a) { int n=a.size(); sort(a.begin(),a.end(),[](const vector<int>&x,const vector<int>&y){ if(x[0]!=y[0]){ return x[0]>y[0]; } else{ return x[1]<y[1]; } } ); int ma=a[0][1]; int ans=0; for(int i=1;i<n;i++){ if(ma>a[i][1]){ ans++; } else{ ma=a[i][1]; } } return ans; } };