首页 > 试题广场 >

子数组绝对值的最大值

[编程题]子数组绝对值的最大值
  • 热度指数:619 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
小红拿到了一个长为 n 的数组 ,她想知道子数组和的绝对值的最大值是多少,请你帮帮她。

输入描述:
第一行输入一个整数 n \left(1 \leqq n \leqq 2\times10^5 \right)
第二行输入  个整数


输出描述:
输出一个整数,代表子数组和的绝对值的最大值。
示例1

输入

5
3 -2 1 -4 4

输出

5
void solve()
{
	int n;
	cin>>n;
	vector<LL>a(n+1);
	for(int i=1;i<=n;i++) cin>>a[i];
	vector<LL>dp1(n+1),dp2(n+1);
	dp1[1]=a[1];dp2[1]=a[1];
	LL mmax=dp1[1],mmin=dp2[1];
	for(int i=2;i<=n;i++){
		dp1[i]=max(a[i],dp1[i-1]+a[i]);
		dp2[i]=min(a[i],dp2[i-1]+a[i]);
		mmax=max(mmax,dp1[i]);
		mmin=min(mmin,dp2[i]);
	}
	cout<<max(mmax,-mmin)<<"\n";
}

发表于 2026-02-10 16:01:25 回复(0)
#include <iostream>
#include<vector>
using namespace std;

int main() {
    int n,max_ans,min_ans;
    cin>>n;
    vector<int>dp(n+1),dp1(n+1),dp2(n+1);
    for(int i=1;i<=n;i++)cin>>dp1[i];
    min_ans=max_ans=dp[1]=dp2[1]=dp1[1];
    for(int i=2;i<=n;i++){
        dp[i]=max(dp1[i],dp1[i]+dp[i-1]);
        dp2[i]=min(dp1[i],dp1[i]+dp2[i-1]);
        max_ans=max(dp[i],max_ans);
        min_ans=min(dp2[i],min_ans);
    }
    cout<<max(abs(max_ans),abs(min_ans));
}
// 64 位输出请用 printf("%lld")
发表于 2026-02-09 09:30:11 回复(0)