OR57 手套

简介: OR57 手套

练习题入口

问题描述

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

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

测试样例:


52bfc07ec492161fd07e7ba2b1845cc5_06badf1acaf6411db1c10764c9fdf62f.png52bfc07ec492161fd07e7ba2b1845cc5_06badf1acaf6411db1c10764c9fdf62f.png52bfc07ec492161fd07e7ba2b1845cc5_06badf1acaf6411db1c10764c9fdf62f.png

解题分析

       解析这道题,我们可以分成两步:

第一步:怎样选取一定能保证配对一双手套

如上图,我们是不是可以把左手套全部取完,然后再在右手套中取一双,这样就能保证最少配对一双手套(反之把右手套取完)。

例如:把左手套取完 2+3+2+4 = 13

          右手套至少要有一只用来配对:1

总数:13+1=14

第二步:如何确保取出的手套是最少的

  我们可以对比左和右中的手套总数,然后分别减去其中最小的数量的手套数,最后加1

  那边算出的总数少就用哪边的。

为什么要减去数量最少的那一种手套?

     假设我们减去 left[1]位置的手套,也就是减3,然后再+1算出总数,+1的目的是想让减去那一种手套也留下一只。

      结果为 9 ,我们想要这9只的手套的数量分别为 2  1  2  4,此时就不能按照我们心中所想了,会有多种排列组合 例如 0  3  2  4   left[0]种类的手套直接没有!!!

   

     所以我们要减去数量最小的手套,我们再取的时候就只会有一种组合

第三步:解决某一种手套为0的情况

   当有一种手套为0时,我们再计算的结果就会超过手套总数,所以我们再算取出手套数时要先把为0放一边。

 这时,最下值也要变,从 0 变为 1

最后我们定义一个sum 把数量为0的手套的配对手套加起来,再与第二步算出的手套数相加

总步骤:      

代码实现

import java.util.*;
public class Gloves {
    public int findMinimum(int n, int[] left, int[] right) {
        // write code here
        int sumLeft = 0;
        int sumRight = 0;
        int minLeft = Integer.MAX_VALUE;
        int minRight = Integer.MAX_VALUE;
        int sum = 0;
        for(int i = 0;i < n;i++){
            if(left[i]*right[i] == 0){
                sum += left[i] + right[i];
            }else{
                sumLeft += left[i];
                sumRight += right[i];
                if(minLeft > left[i]){
                    minLeft = left[i];
                }
                if(minRight > right[i]){
                    minRight = right[i];
                }
            }
        }
        return Math.min(sumLeft - minLeft+1,sumRight - minRight +1)+1+sum;
    }
}
相关文章
|
存储 Java Linux
Springboot 超简单实现在线预览,Word文档 doc、xlsx、pdf、txt等
Springboot 超简单实现在线预览,Word文档 doc、xlsx、pdf、txt等
2967 0
Springboot 超简单实现在线预览,Word文档 doc、xlsx、pdf、txt等
|
7月前
|
机器学习/深度学习 算法 测试技术
DeepSeek-R1-0528:小更新大升级
今天,DeepSeek R1 开源发布了其“小版本”升级——DeepSeek-R1-0528。
899 23
DeepSeek-R1-0528:小更新大升级
|
10月前
|
算法 关系型数据库 MySQL
join查询可以⽆限叠加吗?MySQL对join查询有什么限制吗?
大家好,我是 V 哥。本文详细探讨了 MySQL 中 `JOIN` 查询的限制及其优化方法。首先,`JOIN` 查询不能无限叠加,存在资源(CPU、内存、磁盘 I/O)、性能和语法等方面的限制。过多的 `JOIN` 操作会导致数据库性能急剧下降。其次,介绍了三种常见的 `JOIN` 查询算法:嵌套循环连接(NLJ)、索引嵌套连接(INL)和基于块的嵌套循环连接(BNL),并分析了它们的触发条件和性能特点。最后,分享了优化 `JOIN` 查询的方法,包括 SQL 语句优化、索引优化、数据库配置调整等。关注 V 哥,了解更多技术干货,点赞👍支持,一起进步!
249 3
|
存储 Java 调度
Android面试题之Kotlin协程到底是什么?它是线程吗?
本文探讨了协程与线程的区别,指出协程并非线程,而是轻量级的线程替代。协程轻量体现在它们共享调用栈,内存占用少,仅需几个KB。协程切换发生在用户态,避免了昂贵的内核态切换。在Kotlin中,协程通过Continuation对象实现上下文保存,允许高效并发执行,而不会像线程那样消耗大量资源。通过`runBlocking`和`launch`示例展示了协程的非阻塞挂起特性。总结来说,协程的轻量主要源于内存占用少、切换开销低和高并发能力。
490 0
|
机器学习/深度学习 数据采集 人工智能
探索未来:大模型私有化垂直技术的创新路径
【10月更文挑战第16天】随着人工智能技术的发展,大模型在各领域的应用日益广泛,但数据隐私和安全问题成为企业应用的障碍。大模型的私有化垂直技术应运而生,通过定制化的方案,不仅保障数据安全,还能针对特定行业需求进行优化,提高模型的准确性和效率。以医疗健康领域为例,私有化大模型技术可以在本地环境中部署和训练模型,确保数据不出域,同时利用最新AI技术改善医疗服务。未来,这一技术将在更多行业中发挥重要作用,推动社会经济的高质量发展。
223 4
|
前端开发 JavaScript
setTimeout、Promise、Async/Await 的区别
`setTimeout` 是用于延迟执行函数的简单方法;`Promise` 表示异步操作的最终完成或失败;`Async/Await` 是基于 Promise 的语法糖,使异步代码更易读和维护。三者都用于处理异步操作,但使用场景和语法有所不同。
|
缓存 数据处理 UED
【Uniapp 专栏】Uniapp 开发中的疑难问题解决与进阶策略
【5月更文挑战第17天】在 Uniapp 开发中,解决页面间数据传递、网络请求异常、屏幕适配及性能优化等问题至关重要。利用路由参数传递复杂数据,如`uni.navigateTo`和`JSON.stringify`;处理网络请求异常时,添加错误处理机制增强健壮性;使用响应式设计和缓存策略优化布局和性能。针对组件问题,需排查依赖和配置,而平台差异则需定制化处理。通过不断学习和实践,提升开发技能,确保项目成功实施。
356 2
【Uniapp 专栏】Uniapp 开发中的疑难问题解决与进阶策略
|
运维 Java Serverless
深度解析四大主流软件架构模型:单体架构、分布式应用、微服务与Serverless的优缺点及场景应用
深度解析四大主流软件架构模型:单体架构、分布式应用、微服务与Serverless的优缺点及场景应用
1694 0
|
安全 Java 数据安全/隐私保护
Spring 安全配置中拦截 URL 的顺序重要性
【8月更文挑战第21天】
225 1
|
编解码
FFmpeg开发笔记(三十七)分析SRS对HLS协议里TS包的插帧操作
《FFmpeg开发实战》书中讲解了音视频封装格式,重点介绍了TS,因其固定长度和独立解码特性,常用于HLS协议。HLS通过m3u8文件指示客户端播放TS分片。SRS服务器在转换MP4至TS时,会在每个TS包头添加SPS和PPS帧,保证解码完整性。这一过程在SrsIngestHlsOutput::on_ts_video函数中体现,调用write_h264_sps_pps和write_h264_ipb_frame完成。详细实现涉及SrsRawH264Stream::mux_sequence_header函数,遵循ISO标准写入SPS和PPS NAL单元。
378 0
FFmpeg开发笔记(三十七)分析SRS对HLS协议里TS包的插帧操作