首页 > 试题广场 >

手套

[编程题]手套
  • 热度指数:5850 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

在地下室里放着n种颜色的手套,手套分左右手,但是每种颜色的左右手手套个数不一定相同。A先生现在要出门,所以他要去地下室选手套。但是昏暗的灯光让他无法分辨手套的颜色,只能分辨出左右手。所以他会多拿一些手套,然后选出一双颜色相同的左右手手套。现在的问题是,他至少要拿多少只手套(左手加右手),才能保证一定能选出一双颜色相同的手套。

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

测试样例:
4,[0,7,1,6],[1,5,0,6]
返回:10(解释:可以左手手套取2只,右手手套取8只)
头像 阿贝尔的日记
发表于 2022-09-29 16:45:54
手套 手套 /* 2022-09-29 15:49:24 要想能够让左右手套至少有一副配对 我们可以先把左手手套每种都至少拿一只,然后再随便拿一只右手手套就可以成功配对 问题就是如何保证每种手套都能拿一种。 以【3 7 2 3 5】为例 拿5种?肯定不行的,有可能都是同一个颜色 拿7种?不行,有可能 展开全文
头像 喜欢可抵岁月漫长
发表于 2023-09-26 16:44:31
import java.util.*; public class Gloves { public int findMinimum(int n, int[] left, int[] right) { int count=0;//定义出现0的情况先.需要先拿几只手套,来简化问题 展开全文
头像 郑州大学
发表于 2023-04-09 23:22:58
import java.util.*; /** * 解题思路:(当每一种颜色的左手或者右手手套个数均大于零的时候) * 主要思路就是让一只手的手套每个颜色的都至少拿一只,之后另一只手随便拿一个就至少可以配对出一双手套, * 即求出左手手套个数为 leftSum ,其中个数最少的为 leftM 展开全文
头像 wind_stop
发表于 2023-10-18 20:30:04
import java.util.*; public class Gloves { public int findMinimum(int n, int[] left, int[] right) { int ret = 0; for (int i = 0; i 展开全文
头像 牛客574733168号
发表于 2023-10-17 20:59:51
解题思路:有0的情况: 如果数组中的某个元素为0,那么就代表着有一边手套颜色的数量为0。假设是左边手套的某种颜色数量为0,右边不为0,此时最终结果ret += 不为0的数。即有一端为0,另一端不为0,ret 就要加上不为0的那一端的数量。为什么呢?因为是天黑的情况,拿手套的人根本知道是否哪种颜色为0 展开全文
头像 硌手的小虫子
发表于 2023-04-09 21:10:59
import java.util.*; public class Gloves { public int findMinimum(int n, int[] left, int[] right) { int leftsum=0; int rightsum=0; 展开全文
头像 smonkey1257
发表于 2024-03-01 09:15:26
/* * 1. 分别求出 可配对手套 之和 * [0,7,1,6] * [1,5,0,6] * 左手手套之和 = 7 + 6; * 右手手套之和 = 5 + 6; * 第一、三种颜色的手套不可配对,特殊处理,用一个 specialSum 将这些手套的数量 展开全文
头像 我fo慈悲
发表于 2023-06-04 18:01:18
#include <climits> class Gloves { public: int findMinimum(int n, vector<int> left, vector<int> right) { int left_sum = 展开全文
头像 牛客709888295号
发表于 2022-05-04 11:48:52
1.要想能够让左右手套至少有一副配对,我们可以先把左手手套每种都至少拿一只,然后再随便拿一只右手手套就可以成功配对    2.先计算出左手和右手手套的总数,然后减去各自的最少的数再加一,这样就可以保证取出的手套至少每种都有一只.    3.比较两者较小的那个数,决定先取左手还是先取右手.    4. 展开全文
头像 1v7w
发表于 2023-11-15 15:49:41
首先为了防止选到的手套是无法匹配的(另一边是0),那么就索性假设已经全都选到了他们。在此基础上,再去选择能够匹配的手套。 class Gloves { public: int findMinimum(int n, vector<int> left, vector<int&g 展开全文