0
点赞
收藏
分享

微信扫一扫

返回子数组的最大累加和

高子歌 2023-06-09 阅读 62


题目

返回子数组的最大累加和_ios

思路

从左往右进行遍历,进行累加,同时进行判断

当,当前的sum出现小于0 的情况时,前面那一串都不要了,从当前位置开始累加

当,sum依然>0时,说明继续加下去是可能得到更大的值,所以继续加下去

从中不断比较max_sum  最终就能得到最大值

 

代码

#include<iostream>
#include<cstdlib>
#include<ctime>
#include<stack>
using namespace std;


void printArr(int N);
void scanfArr(int N);
int arr[1000];

const int INF = 0x3f3f3f3f;


int main(){
	
	int N = 7; 
	scanfArr(N);
	printArr(N);
	
	int max_sum = 0;
	int sum = 0;
	for (int i=0;i<N;i++){
		if(sum<0) sum=arr[i];
		else sum += arr[i];
		max_sum = max(max_sum,sum);
	}
	

	printf("%d\n",max_sum);
	printArr(N);

	return 0;
} 

void randArr(int N){
	
	srand((int)time(0));
	for(int i=0;i<N;i++){
		arr[i] =rand()%11-5; //[-5,5];  
	}
}

void printArr(int N){
	for(int i=0;i<N;i++){
		printf("%d ",arr[i]);
	}
	printf("\n");

}

void scanfArr(int N){
	for(int i=0;i<N;i++){
		scanf("%d",&arr[i]);
	}
}

 

举报

相关推荐

0 条评论