数据结构(最大子列和问题)

    xiaoxiao2021-04-17  35

    / 我简单的说下做法:(今天找了几道数据结构的题目来做) //在这一遍扫描数组当中,从左到右记录当前子序列的和temp_sum,若这个和不断增加,那么最大子序列的和max也不断增加(不断更新max)。 //如果往前扫描中遇到负数,那么当前子序列的和将会减小。此时temp_sum 将会小于max,当然max也就不更新。如果temp_sum降到0时, //说明前面已经扫描的那一段就可以抛弃了,这时将temp_sum置为0。然后,temp_sum将从后面开始将这个子段进行分析, //若有比当前max大的子段,继续更新max。这样一趟扫描结果也就出来了。 #include<cstdio> #include<iostream> #include<algorithm> #include<stdlib.h> #include<string> using namespace std ; const int maxn = 100010 ; int k , a [ maxn ]; int main () { scanf ( "%d" , & k ); for ( int i ; i < k ; i ++ ) { scanf ( "%d " , & a [ i ]); } int i ; int tempsum = 0 , maxn = 0 ; for ( i = 0 ; i < k ; i ++ ) { tempsum += a [ i ]; if ( tempsum > maxn ) maxn = tempsum ; else if ( tempsum < 0 ) tempsum = 0 ; } printf ( "%ld \n " , maxn ); //这里我错了好几遍!!!输出是整型类型没看清! return 0 ; }
    转载请注明原文地址: https://ju.6miu.com/read-674042.html

    最新回复(0)