详解牛客----手套

原题链接:手套__牛客网

解题思路:

1. 首先考虑两边手套都不出现0的情况

以取左边的为例子:把左边所有的手套数量减去数量最小的颜色的数量然后+1对应上图就是取17-2+1=16只,也就是说,左边取16只手套肯定把所有颜色都取出现在只要往另一只手中取一只就能匹配了。假设取15只手套,那么可能存在这么一种情况:取了4只黄色,5只绿色,6只蓝色;那么橙色的就可能取不到,所以取15只手套不能100%的把所有可能出现的颜色都取出。同样的操作把右边的走一遍,判断左边和右边所取的数量哪一种更小,然后最后的值+1就能匹配了。

2. 存在两边可能出现 0 的情况

最终代码实现:

 

class Gloves {
public:
    int findMinimum(int n, vector<int> left, vector<int> right) {
        // write code here
        int sum=0;
        int left_min=INT_MAX;
        int right_min=INT_MAX;
        int left_sum=0,right_sum=0;
        for(int i=0;i<n;i++)
        {
            if(left[i]*right[i]==0)
            sum+=left[i]+right[i];//如果存在一个为0,就要把这种情况求出
            else
            {
                left_sum+=left[i];
                left_min=left[i]<left_min?left[i]:left_min;
                 right_sum+=right[i];
                right_min=right[i]<right_min?right[i]:right_min;
            }
        }
        return sum+=(left_sum>right_sum?(right_sum-right_min+1):(left_sum-left_min+1))+1;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

年轻人江老Der

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值