連續子數組最大和

來源:互聯網
上載者:User

標籤:blog   art   for   io   re   div   

求一個數組的相加和最大的連續子數組

思路:
一直累加,只要大於0,就說明當前的“和”可以繼續增大,
如果小於0了,說明“之前的最大和”已經不可能繼續增大了,就從新開始,
result=max{result+arr[i],arr[i]};顯然,若result>0,則可以繼續相加,否則,就重新開始。

#include<stdio.h>#define INF 65535int Maxsum(int * arr, int size){    int maxSum = -INF;    int sum = 0;    for(int i = 0; i < size; ++i)    {        if(sum < 0)        {            sum = arr[i];        }else        {            sum += arr[i];        }        if(sum > maxSum)        {            maxSum = sum;        }    }    return maxSum;}void Maxsum_location(int * arr, int size, int & start, int & end){    int maxSum = -INF;    int sum = 0;    int curstart = start = 0;  /* curstart記錄每次當前起始位置 */    for(int i = 0; i < size; ++i)    {        if(sum < 0)        {            sum = arr[i];            curstart = i;     /* 記錄當前的起始位置 */        }else        {            sum += arr[i];        }        if(sum > maxSum)        {            maxSum = sum;            start = curstart; /* 記錄並更新最大子數組起始位置 */            end = i;        }    }}void main(){    /* 測試案例 */    //int arr[] = {8,-10,3,60,-1,-6};    int arr[] = {1,-2,3,5,-1,2};    int arr2[] = {-9,-2,-3,-5,-4,-6};    int len = sizeof arr / sizeof(int);    int len2 = sizeof arr2 / sizeof(int);     /* 測試實現 */    printf("%d %d\n",Maxsum(arr,len),Maxsum(arr2,len2));     /* 返回起始位置 */    int start = -1;    int end = -1;    Maxsum_location(arr,len,start,end);    printf("start:%d end:%d\n", start, end);    Maxsum_location(arr2,len2,start,end);    printf("start:%d end:%d\n", start, end); }

  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.