求子數組的最大和

這個題目其實就是最大連續字段和,在動態規劃部分講過。

現在爲了阿里面試,再次拿出來複習一下。


#include<stdio.h>
int main()
{
    int a[100];
    int dp[100];
    int n,start,end,max;
    while(scanf("%d",&n)==1)
    {
        int i;
        for(i=0;i<n;i++)
            scanf("%d",&a[i]);
        max = 0;
        dp[0] = a[0];
        for(i=1;i<n;i++)
        {
            if(dp[i-1]>0)
                dp[i] = dp[i-1]+a[i];
            else
                dp[i] = a[i];
            if(dp[i]>max)
            {
                max = dp[i];
                if(dp[i] == a[i])
                {
                    start = i;
                    end = i;
                }
                else
                {
                    end = i;
                }
            }
        }
        printf("max=%d,start=%d,end=%d",max,start,end);
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章