leetcode 游戏中弱角色的数量

题目链接
思路:排序+组内排序
分析:按照题目的意思,如果有一个角色,攻击值和防守值都小于另一个角色,那么这个角色就是弱角色。
首先,要两个值都小于另一个角色,那么起码一个值要小于另一个角色吧,好的,那么我们首先按照一个值降序排列,这里我选择了攻击值,也就是说,前面的攻击值肯定大。
其次,如果我们把攻击值相同的看成一个组,那么从这个组里面选出防守值最大的,那么下一个组的防守值小于这个组的最大防守值得肯定就是弱角色。因为下一组得攻击值肯定比这个组小,因为我们一开始按照攻击值降序排列得。

但是目前有个问题,就是如何更新这个最大得防御值,也就是说要比完一组并且当前组要有更大得防御值,才更新这个防御值。那么如何更新?
这里有很多方法可以去实现更新,我这里使用得依然是排序,就是组内排序,也就是在攻击值相同得一组内,对防御值进行升序排序。那么如果遍历properties
如果出现了防御值小于前面的,那么肯定是下一组了,那么可以直接统计答案。
如果出现了防御值大于前面的,那么就更新最大防御值。此时可能是下一组也可能是本组。这个倒不要紧。
如下图:
在这里插入图片描述

代码:

class Solution {
    public int numberOfWeakCharacters(int[][] properties) {
        Arrays.sort(properties, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                if(o1[0]-o2[0]==0){//攻击相同
                    //防御升序
                    return o1[1]-o2[1];
                }
                //否则 攻击降序
                return o2[0]-o1[0];
            }
        });
        int res = 0;
        int maxDef = properties[0][1];
        for(int i = 1; i< properties.length;i++){
            if(maxDef>properties[i][1]){
            	//说明当前肯定是maxDef的后面的组,也就是攻击值已经确定了当前是小于前面的
                res++;
            }else{
                maxDef = properties[i][1];
            }
        }
        return res;
    }   
}

好好学习。
不打扰是我的温柔。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值