手套问题
来源:互联网 发布:qq企业邮箱端口 编辑:程序博客网 时间:2024/06/03 01:56
题目描述
在地下室里放着n种颜色的手套,手套分左右手,但是每种颜色的左右手手套个数不一定相同。A先生现在要出门,所以他要去地下室选手套。但是昏暗的灯光让他无法分辨手套的颜色,只能分辨出左右手。所以他会多拿一些手套,然后选出一双颜色相同的左右手手套。现在的问题是,他至少要拿多少只手套(左手加右手),才能保证一定能选出一双颜色相同的手套。
给定颜色种数n(1≤n≤13),同时给定两个长度为n的数组left,right,分别代表每种颜色左右手手套的数量。数据保证左右的手套总数均不超过26,且一定存在至少一种合法方案。
测试样例:
4,[0,7,1,6],[1,5,0,6]
**返回:10(解释:可以左手手套取2只,右手手套取8只)
思路:**
* 1:把左手套全部拿出来,右手套选出一个,即可配对
* 2:把右手套全部拿出来,左手套选出一个,即可配对
* 但是这两种方法缺乏一点考虑,1中从右手套中选出配左手套,有一种情况
* 左手套中可能有一种颜色为0,而右手套却有这种颜色,这时如果选择这个右手套
* 就不可以配对,所以总数需要1+这类右手套的个数才可成功配对,此外还有一点
* 需要考虑,就是只需要配对一个即成功,所以把左右手套都有的颜色中左手套个数
* 最少的手套数变为1,因为多了也是冗余。2中类似。
* 程序中的max = max - min + 2可以理解为
* max = max -(min - 1) + 1
import java.util.*;public class Gloves { public int findMinimum(int n, int[] left, int[] right) { int max1 = 0,max2 = 0; int min1 = 27,min2 = 27;//总手套数 int i; for(i=0;i<n;i++){ if(left[i] == 0){ max1 = max1+right[i]; } else{ max1 = max1+left[i]; } if(right[i] == 0){ max2 = max2+left[i]; } else{ max2 = max2+right[i]; } if(left[i]!=0 && right[i]!=0 && left[i]<min1){ min1 = left[i]; } if(right[i]!=0 && left[i]!=0 && right[i]<min2){ min2 = right[i]; } } max1 = max1-min1+2; max2 = max2-min2+2; return (max1<max2)?max1:max2; }}
0 0
- 手套问题
- 手套
- 取同色手套的排列组合问题
- 数据手套
- 整理手套
- 【笔试】挑手套
- 20061208 被发誓的手套
- 多交互智能手套Miiglove
- 卡丁车60个级别分数手套大全
- 2016暑期集训16B手套
- 南非的5DT数据手套使用说明
- USB手套,相伴一生,冬天,解放双手很重要。
- [英语阅读]杰克逊“比利•金”手套将拍卖
- [英语阅读]澳门酒店高价拍得杰克逊手套
- 乌克兰学生团EnableTalk研制手语翻译手套
- 电容屏:为什么带手套无法进行操作手机?
- 绝缘靴手套耐压试验装置_电气百科
- 智能绝缘靴手套耐压试验装置_电气…
- 访问数组元素的三种方法
- 51NOD 1523 非回文
- 锐捷客户端的默认网关跟ipv4的网关不一样
- 洛谷P1108 低价购买
- CodeForces 732D Exams 二分+贪心
- 手套问题
- Linux操作系统中常用命令
- [DockerRegistry]搭建Docker Registry v2
- CodeForces 731C Socks 并查集
- [转载]EasyRTMP调用librtmp推送RTMP数据时CPU占用高的问题调优
- div中的元素居中如img text ul div 等(待补充)
- java 创建和使用类的对象
- EasyRTMP直播推送效率优化之开源librtmp CPU占用高效率优化
- CodeForces 727C GuessTheArray 第一道交互题