阿里雲筆試題:最大子段和問題的動態規劃解法

來源:互聯網
上載者:User

最大子段和問題的動態規劃解法,給出一段數字,求出最大欄位和?

例如:數組a,整數個數為n,b為輔助數組

a: 2 3 -7 6 4 -5

b: 2 5 -2 6 10 5

那麼,最大子段和為10

 

本題採用動態規劃的思想,令b[j]為以j結尾的最大子段和,那麼有:

b[j]=max{b[j-1]+a[j], a[j]}

因此,在求b[j]值的時候,只需要看b[j-1]是否大於零,如果大於零,則b[j]=b[j-1]+a[j];如果小於零,則b[j]=a[j]。

這樣一共有n個b值,儲存最大值即可。

 

代碼:

int maxSum(int[] a, int n)

{

    int sum=0;

    int b=0;

    for(int i=0; i<n; i++)

    {

        if(b>0)

             b+=a;

        else

             b=a;

        if(b>sum)

            sum=b;

    }

    return sum;

}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.