题解 | #手套#

手套

https://www.nowcoder.com/practice/365d5722fff640a0b6684391153e58d8

手套

手套

/*
2022-09-29 15:49:24
要想能够让左右手套至少有一副配对
我们可以先把左手手套每种都至少拿一只,然后再随便拿一只右手手套就可以成功配对
问题就是如何保证每种手套都能拿一种。
以【3 7 2 3 5】为例
拿5种?肯定不行的,有可能都是同一个颜色
拿7种?不行,有可能都是同一个颜色
8?也不行
。。。
全部拿走?不合适了
全部拿走再减去最少的,这样有可能就缺了最少的一种颜色,因此再+1
这个手套数量最少不能是0,如果是0会产生10个手套,取11次的bug

如果某个颜色没有手套,就必须得把该颜色对应的另一边手套累加起来。

先计算出左手和右手手套的总数,然后减去各自的最少的数再加一
这样就可以保证取出的手套至少每种都有一只
计算总数的时候,要找出手套数量最少的那个颜色
比较两者较小的那个数,决定先取左手还是先取右手
最后再加上另一种手套的一只就行
*/
class Gloves {
public:
    int findMinimum(int n, vector<int> left, vector<int> right) {
        int leftSum = 0, leftMin = INT_MAX;
        int rightSum = 0, rightMin = INT_MAX;
        int ret = 0;
        for(int i = 0; i < n; ++i)
        {
            if(left[i] == 0 || right[i] == 0)
            {
                ret += left[i] + right[i];
            }
            else
            {
                // 更新数量最少的手套
                leftMin = min(leftMin, left[i]);
                rightMin = min(rightMin, right[i]);
                leftSum += left[i];
                rightSum += right[i];
            }
        }
        // 遍历结束,判断左边的最少还是右边最少 加入左手最少的,就再从右手随便取一只
        ret += min(leftSum - leftMin + 1, rightSum - rightMin + 1) + 1;
        return ret;
    }
};
全部评论
学到了!!
点赞 回复 分享
发布于 2022-10-26 15:34 陕西

相关推荐

来,说点可能被同行“骂”的大实话。🙊当初接数字马力Offer时,朋友都说:“蚂蚁的“内包”公司?你想清楚啊!”但入职快一年后的今天,我反而对他有了不一样的看法!🔹&nbsp;是偏见?还是信息差!之前没入职之前外面都在说什么岗位低人一等这类。实际上:这种情况不可至否,不能保证每个团队都是其乐融融。但我在的部门以及我了解的周边同事都还是十分好相处的~和蚂蚁师兄师姐之间也经常开一些小玩笑。总之:身份是蚂蚁公司给的,地位是自己挣的(一个傲娇女孩的自述)。🔹&nbsp;待遇?玩的就是真实!试用期工资全额发!六点下班跑得快(早9晚6或者早10晚7,动态打卡),公积金顶格交。别听那些画饼的,到手的钱和下班的时间才是真的(都是牛马何必难为牛马)。🔹&nbsp;能不能学到技术?来了就“后悔”!我们拥有权限直通蚂蚁知识库,技术栈多到学不完。说“学不到东西”的人,来了可能后悔——后悔来晚了(哈哈哈哈,可以不学但是不能没有)!💥&nbsp;内推地址:https://app.mokahr.com/su/ueoyhg❗我的内推码:NTA6Nvs走我的内推,可以直达业务部门,面试流程更快速,进度可查!今天新放HC,之前挂过也能再战!秋招已经正式开始啦~机会就摆在这,敢不敢来试一试呢?(和我一样,做个勇敢的女孩)
下午吃泡馍:数字马力的薪资一般哇,5年经验的java/测试就给人一万出头,而且刚入职第三天就让人出差,而且是出半年
帮你内推|数字马力 校招
点赞 评论 收藏
分享
评论
6
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务