首页 > 其他分享 >每日一题之最大子段和

每日一题之最大子段和

时间:2024-11-16 12:49:41浏览次数:3  
标签:子段 int max sum long current 数组 一题 每日

给定由n个整数组成的序列a1,a2,…,an,序列中可能有负数,
要在这n个数中选取相邻的子段ai,ai+1,…,aj(1≤i≤j≤n),使其和最大,并输出最大的和。
例如:当{a1,a2,…,an}={1,-3,7,8,-4,12,-10,6}时,最大子段和为:sum=23。
输入格式:第一行输入一个正整数N,表示序列的长度。N≤100000;第2行输入N个整数
输出格式:输出一个整数代表最大子段和 

#include<iostream>
#include<algorithm>
using namespace std;
const int N=100000;
int main(){
	long long a[N];
	long long prefix[N];
	long long n;
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	prefix[0]=a[0];
	long long maxnum=a[0];
	for(int i=1;i<n;i++){
		prefix[i]=prefix[i-1]+a[i];
		maxnum=max(maxnum,prefix[i]); 
	}
	int l,r;
	for(l=0;l<n;l++){
		for(r=l+1;r<n;r++){
			maxnum=max(maxnum,prefix[r]-prefix[l]);
		} 
	}
	cout<<maxnum<<endl;
	return 0;
} 

时间复杂度优化

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    int N;
    cin >> N;  // 输入序列的长度
    int a[N];   // 存储序列的数组

    // 输入数组中的元素
    for (int i = 0; i < N; ++i) {
        cin >> a[i];
    }

    // 初始化当前子数组和和最大子数组和
    int current_sum = a[0];
    int max_sum = a[0];

    // 从第二个元素开始遍历
    for (int i = 1; i < N; ++i) {
        // 选择是继续加上当前元素,还是从当前元素重新开始子数组
        current_sum = max(a[i], current_sum + a[i]);
        
        // 更新最大子数组和
        max_sum = max(max_sum, current_sum);
    }

    // 输出最大子段和
    cout << max_sum << endl;

    return 0;
}

标签:子段,int,max,sum,long,current,数组,一题,每日
From: https://blog.csdn.net/m0_73096516/article/details/143808414

相关文章

  • 代码随想录算法训练营day47| 739. 每日温度 496.下一个更大元素 I 503.下一个
    学习资料:https://programmercarl.com/0739.每日温度.html#算法公开课单调栈:用数组模拟单调栈,今天的题中,栈中元素都保存的索引值基本思路:将新元素和栈顶索引对应值比较,如果要保持单调递增,则需要新元素不大于栈顶索引对应值;若满足就加入新元素索引到栈中;若不满足,就根据具体题意看......
  • 最大子段和问题
    最大子段和问题——————以洛谷P1115为例最大子段和,顾名思义就是在一段数组中选取元素和最大的子段(或最小)这里总结了动态更新的写法:intmain(){ intn,a,maxm,temp; scanf("%d",&n); for(inti=0;i<n;i++){ scanf("%d",&a); if(i==0)maxm=temp......
  • 每日3
    include<bits/stdc++.h>usingnamespacestd;inta[2000200];intmain(){intn,c;cin>>n>>c;for(inti=0;i<n;i++)cin>>a[i];sort(a,a+n);longlongcnt=0;for(inti=0;i<n;i++){intl=i,r=n;while......
  • sicp每日一题[2.78]
    Exercise2.78Theinternalproceduresinthescheme-numberpackageareessentiallynothingmorethancallstotheprimitiveprocedures+,-,etc.Itwasnotpossibletousetheprimitivesofthelanguagedirectlybecauseourtype-tagsystemrequiresthat......
  • 【SpringBoot每日学习 - 第二天】SpringApplication 启动类:方法篇一
    SpringApplication类是SpringBoot应用程序的核心类之一,负责启动和初始化整个SpringBoot应用。通过调用SpringApplication.run()方法,SpringBoot会启动嵌入式的Web服务器(如Tomcat)并创建Spring容器。SpringApplication类具有一系列方法和配置项,允许开发者自定......
  • 【SpringBoot每日学习 - 第一天】SpringApplication 启动类:属性篇
    SpringApplication类是SpringBoot应用启动的核心类之一,包含了大量的属性,控制着应用启动的各个方面。这些属性涵盖了从配置环境、应用上下文类型、Banner显示、启动日志、事件监听等多个方面。以下是SpringApplication类中重要属性的详细说明及其用途:静态属性DEFAUL......
  • 每日OJ题_牛客_计算字符串的编辑距离_DP_C++_Java
    目录牛客_计算字符串的编辑距离_DP题目解析C++代码Java代码牛客_计算字符串的编辑距离_DP计算字符串的编辑距离_牛客题霸_牛客网描述:Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换......
  • 每日
    includeusingnamespacestd;intmain(){intm,n,num;cin>>m>>n;intarr[999999];ints[999999];for(inti=0;i<m;i++){cin>>arr[i];}for(inti=0;i<n;i++){cin>>num;intst=0;in......
  • 每日小题--买股票的最佳时机
    目录题目  分析解题思路完整代码题目 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返......
  • sicp每日一题[2.77]
    Exercise2.77LouisReasonertriestoevaluatetheexpression(magnitudez)wherezistheobjectshowninFigure2.24.Tohissurprise,insteadoftheanswershegetsanerrormessagefromapply-generic,sayingthereisnomethodfortheoperationmagni......