国产探花免费观看_亚洲丰满少妇自慰呻吟_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;
}

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

圖片精選

主站蜘蛛池模板: 靖西县| 辉县市| 土默特左旗| 吉安县| 宾阳县| 页游| 临城县| 长治市| 岑溪市| 绍兴县| 临夏市| 柳林县| 乐清市| 五莲县| 辰溪县| 正安县| 乌什县| 淳化县| 铜川市| 平昌县| 宁陵县| 舒兰市| 贡觉县| 绍兴市| 大渡口区| 铜陵市| 芷江| 高唐县| 普格县| 白山市| 惠安县| 泸西县| 清流县| 榆林市| 桃园市| 丰宁| 莫力| 澄江县| 黎城县| 海盐县| 界首市|