
✅创作者:陈书予
🎉个人主页:陈书予的个人主页
🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区
🌟专栏地址: Java华为OD机试真题(2022&2023)
文章目录
- 1、题目描述
- 2、输入描述
- 3、输出描述
- 4、Java算法源码
- 5. 测试
- 6.解题思路
1、题目描述
某农村主管理了一大片果园,fields[i]表示不同国林的面积,单位m2,现在要为所有的果林施肥且必须在n天之内完成,否则影响收成。小布是国林的工作人员,他每次选择一片果林进行施肥,且一片国林施肥完后当天不再进行施肥作业。
假设施肥机的能效为K,单位:m2/day,请问至少租赁能效K为多少的施肥机才能确保不影响收成?如果无法完成施肥任务,则返回-1。
2、输入描述
第一行输入为m和n,m表示fields中的元素个数,n表示施肥任务必须在n天内(含n天)完成;
第二行输入为fields,fields[i]表示果林i的面积,单位:m2。
3、输出描述
对于每组数据,输出最小施肥机的能效k,无多余空格。
补充说明:
1 <= fields.length <= 104
1 <= n < 109
1<= fields[i] <= 109
4、Java算法源码
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
int days = sc.nextInt();
int[] fields = new int[m];
for (int i = 0; i < m; ++i) {
fields[i] = sc.nextInt();
}
int maxFields = fields[0];
for (int i = 0; i < m; ++i) {
maxFields = Math.max(maxFields, fields[i]);
}
if (days < m) {
System.out.println(-1);
} else if (days == m) {
System.out.println(maxFields);
} else {
System.out.println(getMin(maxFields, fields, days));
}
}
public static int getMin(int max, int[] fields, int days) {
int start = 1;
int end = max;
while (start + 1 < end) {
int mid = (start + end) / 2;
int sumDays = 0;
for (int i = 0; i < fields.length; ++i) {
if (fields[i] % mid == 0) {
sumDays += fields[i] / mid;
} else {
sumDays += (fields[i] / mid) + 1;
}
}
if (sumDays > days) {
start = mid;
} else {
end = mid;
}
}
return start + 1;
}
5. 测试

6.解题思路
- 首先读取输入的果园数量
m和需要完成施肥任务的天数days。 - 使用循环读取果园面积,将其存储在整数数组
fields中。 - 找到果园面积的最大值,用变量
maxFields记录。 - 根据给定的条件进行判断:
- 如果需要完成施肥任务的天数小于果园数量,即
days < m,则无法在规定天数内完成施肥任务,输出 -1。 - 如果需要完成施肥任务的天数等于果园数量,即
days == m,则直接输出最大果园面积maxFields。 - 否则,调用
getMin()方法计算最小施肥机的能效k,并输出结果。
- 如果需要完成施肥任务的天数小于果园数量,即
- 在 getMin() 方法中,使用二分查找来确定最小施肥机的能效 k。
- 初始化二分查找的起始值
start为 1,终止值end为maxFields。 - 进入循环,直到
start + 1 < end,每次迭代都更新mid为start和end的中间值。 - 在每次迭代中,计算使用当前的
mid值时所需的总天数sumDays。 - 遍历果园面积数组
fields,对于每个果园面积,根据能效mid计算所需的天数,并累加到sumDays中。 - 如果
sumDays大于给定的天数days,说明当前的mid值太小,需要增大能效,将start更新为mid。 - 否则,将
end更新为mid。
- 初始化二分查找的起始值
- 返回
start + 1,即为最小施肥机的能效k。




![[CSS案例二]—实现一个响应式网页,兼容PC移动端,ScrollReveal 增加动画](https://img-blog.csdnimg.cn/img_convert/9ea6d116e5ea4f239463cdd3d7d9b71a.png)












