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;
    }
};

 

posted @ 2021-09-14 16:06  lipu123  阅读(66)  评论(0)    收藏  举报