为什么我们使用 currsum[n+1] 然后在第 1 行23 currsum[i] = currsum[i-1] + arr[i-1];?

Why are we using currsum[n+1] and then on line no. 23 currsum[i] = currsum[i-1] + arr[i-1];?

  1. 为什么她直接使用 [n+1] 而不是 N 然后那行号。 23 什么是平等?
  2. 为什么我们使用 INT_MIN 表示最大数或数组,而使用 `INT_MAX 表示最小值?
#include <bits/stdc++.h>
using namespace std;

//Question is of Find the Subarray with Maximum sum//

int main(){
    
    int n;
    cin >> n;

    int arr[n];

    for (int i = 0; i < n; i++)
    {
        cin >> arr[i];
    }
    
    int currsum[n+1]; //CurrentSum = currsum[]
    currsum[0] = 0;

    for (int i = 1; i <= n; i++)
    {
        currsum[i] = currsum[i-1] + arr[i-1];
    }

    int MaxSum = INT_MIN;

    for (int i = 1; i <= n; i++)
    {
        int sum = 0;
        for (int j = 0; j <i; j++){
            sum = currsum[i] + currsum[j];
            MaxSum = max(sum, MaxSum);
        }
    }
return 0; 
}
  1. 你听说过prefix sums吗? (又名 运行 总计、累积总和、扫描)。使用 N+1 是因为前缀和还需要包含一个空子数组。
  2. 您使用 INT_MIN 作为最大值,因为 max() 函数取两个值中较大的一个,因此 MaxSum 始终递增。如果您在开头设置 MaxSum = 0 或其他一些数字,则 0 有可能大于任何实际总和。为确保默认值不会覆盖实际值,您将其设置得尽可能低。