牛客网 手套

简介: 牛客网 手套

做题链接手套__牛客网 (nowcoder.com)


题目描述:A想要拿一个左右手颜色相同的手套,现在左右手套分开放置,但现在天黑看不到,问至少要拿多少只手套(左手加右手),才能保证一定能选出一双颜色相同的手套。


输入:n颜色种数(1≤n≤13)     两个长度为n的数组left,right,分别代表每种颜色左右手手套的数量。数据保证左右的手套总数均不超过26,且一定存在至少一种合法方案。


测试用例:


4 , [0,7,1,6] , [1,5,0,6]

返回:10  (解释:可以左手手套取2只,右手手套取8只)


思路:


1、左边至少覆盖所有颜色(对应右边为0时的颜色,要都算在内),右边除了对应左边为0的颜色中至少选择一个。


2、右边至少覆盖所有颜色(对应左边为0时的颜色,要都算在内),左边除了对应右边为0的颜色中至少选择一个。


从两种中选择较少的一个。


代码:

import java.util.*;
public class Gloves {
    public int findMinimum(int n, int[] left, int[] right) {
        if(n==1){
            return 2;
        }
        // max 表示覆盖所有颜色的数量
        // min 表示左右至少有一种重合颜色的数量
        int leftMin = countMin(n,left,right);
        int rightMin = countMin(n,right,left);
        int leftMax = countMax(n,left);
        int rightMax = countMax(n,right);
        int a = leftMin+rightMax;
        int b = leftMax+rightMin;
        return a>b?b:a;
    }
    public int countMin(int n, int[] arr, int[] arr1){
        int ret = 0;
        for(int i=0;i<n;i++){
            if(arr1[i] == 0){
                ret += arr[i];
            }
        }
        return ret+1;
    }
    public int countMax(int n, int[] arr){
        int ret = 0;
        Arrays.sort(arr);
        int countZero = 0;
        while(arr[countZero]==0){
            countZero++;
        }//这里的countZero 是计算了Zero的个数,同时也能确定加到哪里结束,到哪里可以加1就行
        for(int i=n-1;i>=countZero;i--){
            if(i==countZero+1 && countZero+1<n-1){
                ret+=1;
            }else{
                ret+=arr[i];
            }
        }
        return ret;
    }
}


注意事项

1. 要注意当只存在一种颜色的时候,左右两边各取一个就行。

2. 要先计算 Min 再计算 Max ,因为Max里面的排序会影响Min的结果。

3. 计算Max,注意是减去除0之外倒数第二小的数字,其他数字和加一,比如 0 1 5 6 的max是 8

相关文章
|
7月前
|
存储
每日一题——leetcode682.棒球比赛
每日一题——leetcode682.棒球比赛
|
7月前
leetcode-682:棒球比赛
leetcode-682:棒球比赛
55 0
LeetCode 682 棒球比赛
用栈实现数字的运算 用switch-case语句对符号进行不同的操作处理 用Stack下的get()方法实现取出栈内第任意个数字
|
Go 索引
LeetCode每日一题(6)——山羊拉丁文
山羊拉丁文 1.题目 2.示例 3.思路 4.代码 5.复杂度分析
142 0
AcWing 660. 零食
AcWing 660. 零食
94 0
AcWing 660. 零食
|
索引
LeetCode每日一题——824. 山羊拉丁文
给你一个由若干单词组成的句子 sentence ,单词间由空格分隔。每个单词仅由大写和小写英文字母组成。
104 0
|
Web App开发 前端开发 程序员
IE 凉了?怎么可能!(二)
这则充满戏谑的问答讨论的是时下非常火的 "IE 凉了" 这个话题。 作为陪伴我们这么多年的 IE ,为什么突然间就凉了呢?
IE 凉了?怎么可能!(二)
|
Web App开发 iOS开发 Windows
IE 凉了?怎么可能!(一)
Hey guys,我是 cxuan,今天偶然间在朋友圈看到非常有意思的一张截图。
IE 凉了?怎么可能!(一)
女神节,一起重温妈妈的少女时代
岁月从不败美人,撷来芳华成至真,快来看看母亲年轻时候的样子吧。
女神节,一起重温妈妈的少女时代
题解 P1434 【滑雪】
题目链接 此题运用功能强大的 ~~暴力搜索~~ 记忆化搜索才是重点!!! 然而,这是一道经典的DP问题 如果我们用$dis[i][j]$来表示坐标为$(i,j)$时的高度  $cnt[i][j]$ 是我们的记忆化数组 在合法的前提下,就有状态转移方程:  $dis[i][j]=max(dis[i...
1032 0