public int getMax(int[] products, int[] works, int windowSize) {
int len = products.length;
int[] sum = new int[len];
int[] realSum = new int[len];
sum[0] = products[0];
realSum[0] = (works[0] == 1 ? products[0] : 0);
for (int i = 1; i < len; i++) {
int isWork = works[i];
sum[i] += sum[i - 1] + products[i];
if (isWork == 1) {
realSum[i] += realSum[i - 1] + products[i];
} else {
realSum[i] = realSum[i - 1];
}
}
int right = Math.min(windowSize, len) - 1;
int result = sum[right] - sum[0] + products[0];
for (int i = 1; i < len; i++) {
int last = i + windowSize - 1;
if (last >= len) {
break;
}
int curSum = realSum[i - 1] - realSum[0] + realSum[0];
curSum += sum[i + windowSize - 1] - sum[i-1];
curSum += realSum[len - 1] - realSum[i + windowSize - 1];
result = Math.max(curSum, result);
}
return result;
}
public static void main1(String[] args) {
int[] products = {100, 200, 150};
int[] works = {0, 1, 0};
int windowSize = 2;
Problem1 p1 = new Problem1();
int result = p1.getMax(products, works, windowSize);
System.out.println(result);
}
public static void main(String[] args) {
int[] products = {100, 200, 150, 100, 360};
int[] works = {0, 1, 0, 1, 0};
int windowSize = 2;
Problem1 p1 = new Problem1();
int result = p1.getMax(products, works, windowSize);
System.out.println(result);
}
加班生产产品
最新推荐文章于 2024-09-27 00:45:01 发布
本文介绍了一个Java方法,用于计算在一个给定窗口大小内,根据员工工作状态(1表示工作,0表示休息)调整产品销售收益的最大值。通过维护实时和累计总和数组,算法高效地实现了在不同时间段内的收益计算和比较。
摘要由CSDN通过智能技术生成