JavaSE第一周期 LeetCode编程

本文涵盖了三个编程挑战:1) 计算在特定时间做作业的学生人数,2) 判断孩子能否通过额外糖果拥有最多糖果,3) 求解拿完所有力扣币的最少次数。题目涉及数组操作、条件判断和优化策略。解决方案分别涉及时间区间判断、比较糖果总数和最小步数计算。
摘要由CSDN通过智能技术生成

JavaSE第一周期 LeetCode编程
一.
给你两个整数数组 startTime(开始时间)和 endTime(结束时间),并指定一个整数 queryTime 作为查询时间。

已知,第 i 名学生在 startTime[i] 时开始写作业并于 endTime[i] 时完成作业。

请返回在查询时间 queryTime 时正在做作业的学生人数。形式上,返回能够使 queryTime 处于区间 [startTime[i], endTime[i]](含)的学生人数。

示例 1:

输入:startTime = [1,2,3], endTime = [3,2,7], queryTime = 4
输出:1
解释:一共有 3 名学生。
第一名学生在时间 1 开始写作业,并于时间 3 完成作业,在时间 4 没有处于做作业的状态。
第二名学生在时间 2 开始写作业,并于时间 2 完成作业,在时间 4 没有处于做作业的状态。
第三名学生在时间 3 开始写作业,预计于时间 7 完成作业,这是是唯一一名在时间 4 时正在做作业的学生。
示例 2:

输入:startTime = [9,8,7,6,5,4,3,2,1], endTime = [10,10,10,10,10,10,10,10,10], queryTime = 5
输出:5

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-students-doing-homework-at-a-given-time
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:本题意为创建一个开始时间数组,一个结束时间数组,一个查询时间,一个开始时间匹配一个结束时间,给出几组时间,给出查询时间,判断有几组时间的时间段包含有查询时间。
使用Scanner方法从键盘输入以输入时间数组和查询时间;
创建开始时间数组startTime[],endTime[];
创建整形int变量queryTime;
创建整形int变量studentnumber;
均调用Scanner从键盘输入;
创建一个循环结构,在输入两个数组后,我们使用ArrayList以及list.size()计算数组中元素个数,我们知道有几组时间,所以用for循环,把循环次数设置为数组中元素个数,即有几组时间,就循环几次;
同步调取两个数组中的相同位数元素,使用if结构判断如果startTime[i]<=queryTime并且queryTime<=endTime[i]则在写作业,返回一次;
再建立一个循环结构上面循环结构每返回一个值,studentnumber变量加一,最后返回studentnumber的值

二.
给你一个数组 candies 和一个整数 extraCandies ,其中 candies[i] 代表第 i 个孩子拥有的糖果数目。

对每一个孩子,检查是否存在一种方案,将额外的 extraCandies 个糖果分配给孩子们之后,此孩子有 最多 的糖果。注意,允许有多个孩子同时拥有 最多 的糖果数目。

输入:candies = [2,3,5,1,3], extraCandies = 3
输出:[true,true,true,false,true]
解释:
孩子 1 有 2 个糖果,如果他得到所有额外的糖果(3个),那么他总共有 5 个糖果,他将成为拥有最多糖果的孩子。
孩子 2 有 3 个糖果,如果他得到至少 2 个额外糖果,那么他将成为拥有最多糖果的孩子。
孩子 3 有 5 个糖果,他已经是拥有最多糖果的孩子。
孩子 4 有 1 个糖果,即使他得到所有额外的糖果,他也只有 4 个糖果,无法成为拥有糖果最多的孩子。
孩子 5 有 3 个糖果,如果他得到至少 2 个额外糖果,那么他将成为拥有最多糖果的孩子。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/kids-with-the-greatest-number-of-candies
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/kids-with-the-greatest-number-of-candies
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:这道题的重点是对比孩子一开始所拥有的糖果数,由题中给出的实例可知,只要一个孩子可能拥有数量最多的糖果就可以,不用管额外的糖果如何分配,故只要孩子的糖果数加额外糖果的数量之和大于任何一个孩子的糖果数就可以拥有最多的糖果;
创建数组candies[];
创建整形int变量 extraCandies;
创建一个循环结构,使用while循环,即每个孩子的糖数循环一次,使用if判断candies[i]+extraCandies>=任何candies[i],如果成立则返回一个true,不成立就返回false。

三.
桌上有 n 堆力扣币,每堆的数量保存在数组 coins 中。我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有力扣币的最少次数。

示例 1:

输入:[4,2,1]

输出:4

解释:第一堆力扣币最少需要拿 2 次,第二堆最少需要拿 1 次,第三堆最少需要拿 1 次,总共 4 次即可拿完。

示例 2:

输入:[2,3,10]

输出:8

限制:

1 <= n <= 4
1 <= coins[i] <= 10

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/na-ying-bi
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:先创建一个数组coins[];
创建整形变量neednumber;
计算数组中元素个数;
建立循环,循环次数为元素个数;
循环中依次抽取数组中元素,并判断coins[i]%2的值,如果0则计算coins[i]/2;如果1则计算coins[i]/2+1的值,并且返回这个值
将返回的值相加即为拿完所有硬币需要的次数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值