求整數陣列中和最大的子陣列的3種方法

2021-06-12 23:36:20 字數 1883 閱讀 8984

輸入乙個整型陣列,陣列裡有正數也有負數。陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。求所有子陣列的和的最大值。要求時間複雜度為o(n)。

使用三種方式實現,分別是蠻力法:bf_maxsubarray,分治法:dc_maxarray,和o(n)實現的單迴圈法find_max。

#include"stdio.h"

#include"math.h"

#include"time.h"

#include"windows.h"

#define min_int -10000

#define max_int 10000

typedef structmaxinfo;

maxinfo bf_maxsubarray(int *a,int n)

} tmp = 0;

} return max;

}maxinfo dc_findmaxcrossingsubarray(int *a,int left,int mid,int right)

} maxinfo rightmax;

rightmax.max_left=mid+1;

rightmax.max_right = mid+1;

rightmax.max= min_int;

tmp = 0;

for(int j = mid+1;jrightmax.max)

}leftmax.max += rightmax.max;

leftmax.max_right = rightmax.max_right;

return leftmax;

}maxinfo dc_maxarray(int *a,int left,int right)

else }

void show(maxinfo max)

void find_max(int *ary,int arysize)

} printf("和最大的子陣列為:\n");

for(int j=start;j<=end;j++)

printf("= %d",max);

}void main()

; //;//

int i=clock();

show(bf_maxsubarray(a,n));

printf("\n**********====\n");

find_max(a,n);

printf("\n**********====\n");

printf("計算耗時:%dms\n",clock()-i);

int mid = (int)floor((n-1)/2);

show(dc_findmaxcrossingsubarray(a,0,mid,n-1));

maxinfo result;

large_integer nfreq;

large_integer nbegintime;

large_integer nendtime;

double time;

queryperformancefrequency(&nfreq);

queryperformancecounter(&nbegintime);

//開始

result = bf_maxsubarray(a,n);//dc_maxarray(a,0,n-1);

queryperformancecounter(&nendtime);

time=(double)(nendtime.quadpart-nbegintime.quadpart)/(double)nfreq.quadpart;

printf("%f微妙\n",time);

show(result);

printf("\n");

}

求整數陣列中和最大的子陣列的和

鄭雲飛 韓亞華 這個問題的複雜性和不確定讓我們讓我們想到了列舉,求出每乙個子陣列的和,但這樣我們我們程式的時間複雜度 將會非常高,於是我們想把辦法簡化它。首先我們將陣列裡連續的正數和負數就和,這樣我們將得到乙個正負相間的 整數陣列。然後再對正整數陣列求最大子陣列,這樣最大子陣列必定是兩頭為正,有奇數...

C 求整數陣列中和最大子串

現在有乙個陣列,陣列裡面有正數或者負數。如何計算其子串中和的最大值。比如,最大值的子串就應該是值為6 下面我直接給出 了,很簡單的,只是當時自己想錯了,所以這裡我把 重新寫了一遍 1 時間演算法為o n 2 2int maxseqint int a,int n 12 13 return s2 14 ...

求乙個整數 陣列中所有連續子陣列中和的最大值

信1101 2 胡弦琴 20113026 王兵茹 20112917 2014 03 10 15 35 37 這個時間點開始發表這篇部落格 剛把程式改好,由於胡弦琴要去上課,所以後續的部落格由我寫完 今天上午最後一節課老師叫我們結組兩個人共同乙個小程式的設計,也就是求乙個整數陣列中所有子陣列和的最大值...