计算list中连续几日和的最大值所对应的第一位数的索引
如果将maxSum
设置为0,那么在比较连续3日和的时候,初始的maxSum
值可能会影响最终的结果。具体来说,如果列表中的所有和都是负数,那么初始的maxSum
值为0可能会导致错误的结果。
假设maxSum
初始值为0,而列表中的所有和都是负数,那么无论怎样计算,maxSum
的值都不会被更新,最终的结果仍然是0,这显然是不正确的。
因此,为了确保正确性,我们将maxSum
初始化为Integer.MIN_VALUE
,这样无论列表中的和是什么,初始的maxSum
值都会被正确更新。
package com.charsming;
import cn.hutool.core.convert.Convert;
import com.charsming.wysk.domain.vo.PptnRVO;
import java.util.*;
import java.util.stream.Stream;
/**
* @author Gaodeman
*/
public class Test {
public static void main(String[] args) throws Exception {
List<Integer> numbers = new ArrayList<>();
// 添加数据到 numbers 列表中
numbers.add(1);
numbers.add(10);
numbers.add(3);
numbers.add(4);
numbers.add(5);
int n = 2; // 设置连续天数
int[] result = findMaxNDaySum(numbers, n);
System.out.println("连续" + n + "日和的最大值为: " + result[0]);
System.out.println("第一位数的索引为: " + result[1]);
}
public static int[] findMaxNDaySum(List<Integer> numbers, int n) {
if (n > numbers.size()) {
throw new IllegalArgumentException("连续天数大于列表长度");
}
int maxSum = Integer.MIN_VALUE;
int startIndex = 0;
for (int i = 0; i <= numbers.size() - n; i++) {
int sum = 0;
for (int j = 0; j < n; j++) {
sum += numbers.get(i + j);
}
if (sum > maxSum) {
maxSum = sum;
startIndex = i;
}
}
return new int[]{maxSum, startIndex};
}
}