java算法收藏

 计算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 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 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};
    }
    }






你可能感兴趣的:(java)