文章目录

  • 题目链接
  • 题目描述
  • 解题思路(正文)
  • 完整代码
  • 总结

题目链接

链接入口

题目描述

1. 题目描述

学校里有一个水房,水房里一共装有 m 个龙头可供同学们打开水,每个龙头每秒钟的供水量相等,均为 1。
现在有 n 名同学准备接水,他们的初始接水顺序已经确定。将这些同学按接水顺序从 1 到 n 编号,i 号同学的接水量为 w 。接水开始时,1 到 m 号同学各占一个水龙头,并同时打开水龙头接水。当其中某名同学 j 完成其接水量要求 w 后,下一名排队等候接水的同学 k 马上接替 j 同学的位置开始接水。这个换人的过程是瞬间完成的,且没有任何水的浪费。即 j 同学第 x 秒结束时完成接水,则 k 同学第 x+1 秒立刻开始接水。若当前接水人数 n 不足 m,则只有 n 个龙头供水,其它 m−n 个龙头关闭。
现在给出 n 名同学的接水量,按照上述接水规则,问所有同学都接完水需要多少秒。

2. 输入描述

第 1 行 2 个整数 n 和 m 用一个空格隔开,分别表示接水人数和龙头个数。 第 2 行 n 个整数 w1、w2、……、wn,每两个整数之间用一个空格隔开,wi表示 i 号同学的接水量。

3. 输出描述

输出只有一行,1 个整数,表示接水所需的总时间。

4. 示例

输入:

8 4
23 71 87 32 70 93 80 76

输出:

163

解题思路(正文)

小伙伴们一开始看到这道题是不是有点不知所措,感觉有点不知如何下手,不急,看看下面我的解题思路或许豁然开啦了。

找最小、做加法、找最大(以示例为例)
1. 找最小:
有10个人接水,有4个水龙头,那么根据题意,前四个人最先使用水龙头接水,在这四个人中找最小接水量,也就是接水时间最短。
2. 做加法
根据题意,当有人接完水之后,立马下一个接水,直至所有人接水完成。即找到最小接水量之后,按照接水顺序(即数组顺序)做加法,更新数组,直至数组遍历结束也就是所有人接水完成。
代码如下:

//外层for循环表示每当内层for循环结束时,即有人接水结束时后来者继续接水,即做加法
//需要注意的是外层循环是从: i=m 开始的
for(int i=m;i<n;i++){//标记最小接水量,是数组的下标//放在外循环内,内循环外是因为内循环每结束一次,都需要在数组内重新比较大小int min=0;//内层for循环表示在所使用的水龙头中,找到最小接水量,即最早使用完水龙头的时间for(int j=1;j<m;j++){min=w[min]<w[j]?min:j;}//找到最小接水量之后,做加法,即后来者继续接水w[min]+=w[i];}

3. 找最大
当数组遍历完成时,找出四个水龙头接水最多的,即为总接水时间。
代码如下:

for(int i=0;i<m;i++){time=time>w[i]?time:w[i];}

核心的解题思路和代码如上,但是还有一个特殊情况是不能忽略的,就是当水龙头数有且只有一个时,所需时间即为总接水量的所需时间了。
代码如下:

if(m==1){for(int i=0;i<n;i++){time+=w[i];}}

完整代码

完整代码如下:

package com.company;import java.util.Scanner;public class lanqiao_jieshui {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int n = scan.nextInt();//接水人数int m = scan.nextInt();//水龙头数int []w = new int[n];//接水吨数for(int i=0;i<n;i++){w[i]= scan.nextInt();}//需要的总时间int time=0;//特殊情况:水龙头只有一个时,那么接水总时间即为接水总量×接水速度if(m==1){for(int i=0;i<n;i++){time+=w[i];}} else{for(int i=m;i<n;i++){int min=0;for(int j=1;j<m;j++){min=w[min]<w[j]?min:j;}w[min]+=w[i];}for(int i=0;i<m;i++){time=time>w[i]?time:w[i];}}System.out.print(time);}
}

总结

以上就是我对该题的全部思路和代码了,欢迎小伙伴们指正改善,欢迎大家在评论区讨论或者私信我哦!

接水问题(Java题解)相关推荐

  1. java变量中不属于复合类型的数据类型是_2006新版JAVA题解(JAVA简单数据类型)...

    2006新版JAVA题解(JAVA简单数据类型) 2007年1月22日来源:233网校网校课程 在线题库评论 分享到 1.下列哪一个是合法的标识符: A.12class; B.+viod; C.-5; ...

  2. 牛客题霸 [容器盛水问题] C++题解/答案

    牛客题霸 [容器盛水问题] C++题解/答案 题目描述 给定一个整形数组arr,已知其中所有的值都是非负的,将这个数组看作一个容器,请返回容器能装多少水. 具体请参考样例解释 题解: 我们找出容器的左 ...

  3. 2020第五届上海第二工业大学新生程序设计竞赛(Java题解)

    2020第五届上海第二工业大学新生程序设计竞赛(Java题解) 作为C/C++版本的补充题解,仅供参考 需要解析的可以看这篇: 2020第五届上海第二工业大学新生程序设计竞赛 用Java语言参加竞赛时 ...

  4. 笔试编程题 拼凑正方形 Java题解 牛牛有4根木棍,长度分别为a,b,c,d。羊羊家提供改变木棍长度的服务,如果牛牛支付一个硬币就可以让一根木棍的长度加一或者减一。牛牛需要用这四根木棍拼凑一个正方

    题目描述 牛牛有4根木棍,长度分别为a,b,c,d.羊羊家提供改变木棍长度的服务,如果牛牛支付一个硬币就可以让一根木棍的长度加一或者减一.牛牛需要用这四根木棍拼凑一个正方形出来,牛牛最少需要支付多少硬 ...

  5. p3371 单源最短路径(弱化版)-java题解-最短路

    弱化版传送门: P3371 [模板]单源最短路径(弱化版) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目背景 本题测试数据为随机数据,在考试中可能会出现构造数据让SPFA不通 ...

  6. 小浩算法-java题解(二分篇)

    小浩算法-java题解-二分篇 二分篇 第875题:阿珂喜欢吃香蕉 第69题:x的平方根 第278题:第一个错误的版本 第153题:旋转排序数组最小值Ⅰ 第154题:旋转排序数组最小值Ⅱ 第475题: ...

  7. cccc-gplt 团体程序设计天梯赛JAVA题解

    1. 前言 大多是想用java解的,有些题java会超时就换成了c++ Github 天梯赛 2. 目录 编号 标题 题解 分类 L1-001 Hello, World Java 水题 L1-002 ...

  8. leetcode|第三大的数java题解

    由于在面试作业帮.好未来侧开实习面试的时候都被问到了这道题,所以我就来写个题解吧 给你一个非空数组,返回此数组中 第三大的数 .如果不存在,则返回数组中最大的数. 示例 1: 输入:[3, 2, 1] ...

  9. [转载] 1022 D进制的A+B (20分)【java题解】【80ms】

    参考链接: Java流Stream 题解 使用 toUnsignedString()即可 我有仔细读过toUnsignedString(),有兴趣可以看看 第3章 java的基本程序设计结构[补缺学习 ...

最新文章

  1. spark读取hdfs路径下的数据_Spark读取HDFS数据分区参考
  2. 从脑电图(EEG)中提取稳定的模式进行识别
  3. JS验证控制输入中英文字节长度(input、textarea等)
  4. 开始报名!首次阿里巴巴经济体双 11 云原生实践展示
  5. 解析html文档的java库及范例
  6. tcp状态机-三次握手-四次挥手以及常见面试题
  7. html文件怎么导出stl文件,3D建模软件导出STL文件的小技巧(一)
  8. 150家通用经销商决定退出凯迪拉克品牌 因不愿投资于销售电动车
  9. 我的docker随笔19:Nextcloud部署
  10. 广西谋建面向东盟金融开放门户
  11. 15. Provide access to raw resources in resouce-managing classes
  12. vulkan android 三星,vulkan android
  13. kali--linux--安装截图工具scrot
  14. Spring扩展之BeanPostProcessor接口
  15. python opencv 二值化 计算白色像素点并计算比例输出可视化
  16. Java整合科大讯飞SDK实现语音转文字
  17. 用友致远A6协同管理软件操作手册
  18. 机器人教育在学校普及
  19. 超级详细树讲解三 —— B树、B+树图解+代码
  20. 生活品质-断舍离Day4

热门文章

  1. html canvas保存为图片,在HTML5 Canvas中放入图片和保存为图片的方法
  2. java swt 布局管理器_JAVA.SWT/JFace: SWT布局管理器
  3. CentOS 7.5下搭建高可用的FastDFS分布式文件系统
  4. 枚举中文转数字并easyexcel导入(读取Read)数据至数据库,用监听器解决导入关联多表的问题
  5. java mediainfo.dll_求mediainfo.dll的函数集或用法
  6. pd.Series.cor的三大相关性系数
  7. 在统计学中参数的含义是指_统计学中基础概念说明
  8. Linux用户与组管理、权限管理、管理命令
  9. SharePoint 2010云计算解决方案
  10. 推荐两个搜索本地文件和文档内容的小工具