华为OD机试 2024C卷题库疯狂收录中,刷题点这里
专栏导读
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷+C卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
公司每日盈利的利润额记于整数数组 profit,请返回连续一或多天利润额总和的最高值。
二、输入描述
第一行为一个整数,表示天数
第二行为整数列表,分别为每日的利润。
三、输出描述
输出整数,表示连续天数利润额总和的最高值。
1、输入
4
2 3 -5 4
2、输出
5
3、说明
"2 3”连续2天的利润总额总和为最高值,连续利润额为5。
四、解题思路
核心算法:
- 累加正利润
- 遇到负数则求前面若干个正数之和的最大值并重置下一个时间段的正数之和
注意:默认肯定有正利润,不考虑全是负利润的时候
五、Java算法源码
public class Test02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 天数
int n = Integer.valueOf(sc.nextLine());
// 每日的利润
int[] arr = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
// 连续一或多天利润额总和的最高值
int max = 0;
// 每日利润下角标
int idx = 0;
// 一个时间段的正数之和
int sum = 0;
while (idx < n){
// 累加正利润
if(arr[idx] >= 0){
sum += arr[idx];
}else{ // 遇到负数则求前面若干个正数之和的最大值
max = Math.max(max, sum);
// 重置下一个时间段的正数之和
sum = 0;
}
idx++;
}
// 解决最后一天利润为正的情况
max = Math.max(max, sum);
System.out.println(max);
}
}
六、效果展示
1、输入
10
2 3 -5 4 2 0 0 1 -2 8
2、输出
8
3、说明
🏆下一篇:华为OD机试 - 简易内存池 - 逻辑分析(Java 2024 C卷 200分)
🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷+C卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。