为什么我们使用 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];?
- 为什么她直接使用 [n+1] 而不是 N 然后那行号。 23 什么是平等?
- 为什么我们使用 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;
}
- 你听说过prefix sums吗? (又名 运行 总计、累积总和、扫描)。使用
N+1
是因为前缀和还需要包含一个空子数组。
- 您使用
INT_MIN
作为最大值,因为 max()
函数取两个值中较大的一个,因此 MaxSum
始终递增。如果您在开头设置 MaxSum = 0
或其他一些数字,则 0
有可能大于任何实际总和。为确保默认值不会覆盖实际值,您将其设置得尽可能低。
- 为什么她直接使用 [n+1] 而不是 N 然后那行号。 23 什么是平等?
- 为什么我们使用 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;
}
- 你听说过prefix sums吗? (又名 运行 总计、累积总和、扫描)。使用
N+1
是因为前缀和还需要包含一个空子数组。 - 您使用
INT_MIN
作为最大值,因为max()
函数取两个值中较大的一个,因此MaxSum
始终递增。如果您在开头设置MaxSum = 0
或其他一些数字,则0
有可能大于任何实际总和。为确保默认值不会覆盖实际值,您将其设置得尽可能低。