国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

求子數組最大和的實例代碼

2020-01-26 16:20:08
字體:
來源:轉載
供稿:網友

題目:
輸入一個整形數組,數組里有正數也有負數。
數組中連續的一個或多個整數組成一個子數組,每個子數組都有一個和。
求所有子數組的和的最大值。要求時間復雜度為O(n)。

例如輸入的數組為1, -2, 3, 10, -4, 7, 2, -5,和最大的子數組為3, 10, -4, 7, 2,
因此輸出為該子數組的和18。

找到狀態轉移方程,dp[i]表示前i個數中,包含i的子數組的最大和。要么第i個數自己最大,要么他要和包含i-1的子數組最大和(即dp[i-1])聯合在一起.
即dp[i] = max{arr[i],dp[i-1]+arr[i]};

代碼如下;

復制代碼 代碼如下:

#include <stdio.h>
#define max(a,b) (a)>(b)?(a):(b)

int res(int* arr, int len){
    //學到一個定義最小數的方法:)
    int max = -(1<<31);
    int i;
    for(i=1;i<len;i++){
        arr[i] = max(arr[i],arr[i-1]+arr[i]);
        if(max < arr[i]) max = arr[i];
    }
    return max;
}

int main(){
    int arr[] = {1,-2,3,10,-4,7,2,-5};
    printf("%d/n",res(arr,8));
    return 0;
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 开鲁县| 同江市| 哈巴河县| 祥云县| 昌邑市| 余姚市| 个旧市| 云和县| 静宁县| 明星| 类乌齐县| 威宁| 大悟县| 广元市| 南陵县| 黄浦区| 行唐县| 玉田县| 嘉善县| 永顺县| 博湖县| 贵港市| 铜梁县| 金湖县| 泌阳县| 浙江省| 文山县| 子长县| 安义县| 岳阳县| 四子王旗| 石屏县| 延安市| 海阳市| 新平| 长宁区| 新干县| 永昌县| 天长市| 札达县| 香河县|