最大子陣列問題

2021-08-29 04:01:04 字數 2253 閱讀 8664

乙個含有n個元素的整數陣列,陣列元素可以是正數也可以是負數,陣列中連續的乙個或多個元素稱為改陣列的子陣列,子陣列所有元素之和稱為子陣列和,求乙個整數陣列子陣列和的最大值。例如陣列array=,相差就是 

最大子陣列就是

這裡 以 int 型別 為例

有一組數;

/// /// 暴力破解

///

///

///

public int maxoutcome(int array)}}

//遍歷 結束 返回 下標

return new int ;//賣出 那一天 要 加上1 得到 從minindex 到maxindex +1 之間 最大最大陣列是[minindex,maxindex]

}

假設有陣列 array   [min,max]

可以 用mid 進行 分割槽 

min       mid       max 

[min,max]

假設i是最大字陣列的最小索引,j是最大索引

用 mid 進行分割槽

[min,mid]  [mid+1,hight]

分成兩區間 

分3種情況 進行考慮

/// /// 遞迴 分治 

///

///

///

///

///

public maxsubarray maxsubarray2(int low,int high,int array)

int mid = (low + high) / 2;//分割槽

maxsubarray subarray1 = maxsubarray2(low, mid, array);//左邊的 情況1

maxsubarray subarray2 = maxsubarray2(mid+1,high, array);//右邊的 情況2

// 情況3

// 左邊 尋找

int total = array[low];

int startindex = low;

int temp = 0;

for (int i = low; i <=mid; i++)

}//右邊 尋找

int total2 = array[mid + 1];

int endindex = mid + 1;

temp = 0;

for (int i = mid+1; i total2)

}// 情況3

maxsubarray subarray3;

subarray3.startindex = startindex;

subarray3.endindex = endindex;

subarray3.total = total + total2;

if (subarray1.total > subarray2.total && subarray1.total > subarray3.total)

else if (subarray2.total > subarray1.total&&subarray2.total>subarray3.total)

else

}

類似的 動態規劃演算法:

最大連續子陣列 問題 :

最大子序和

給定乙個整數陣列nums,找到乙個具有最大和的連續子陣列(子陣列最少包含乙個元素),返回其最大和。

示例:

輸入:[-2,1,-3,4,-1,2,1,-5,4],輸出:6解釋:連續子陣列 [4,-1,2,1] 的和最大,為 6。
高階:

如果你已經實現複雜度為 o(n) 的解法,嘗試使用更為精妙的分治法求解。

解決思路1,用一次for遍歷 用乙個值來儲存最大值,乙個用來儲存當前計算結果值, 如果這個結果值為負值,就從把結果清空,重新從nums[i]開始。

public int  maxserialarray( int nums)

else

//負數直接不考慮,因為 乙個負數 加上後,最小的肯定是以 這個負數為起始點,

// 這點 理解 挺重/要的

max=mathf.max(max,tempmax);

}return max;

}

最大子陣列問題

顧名思義,最大子陣列問題是求乙個陣列array中 和最大的非空連續子陣列 這樣的連續子陣列我們叫做最大子陣列,它的應用也有 很多,比如說找出時間序列中兩個時間節點使得這兩個時間節點對應的值的落差最大,如下圖 對於這類問題,通過求原始時間序列的一階差分得到序列array,此時求得array的最大子陣列...

最大子陣列問題

include include include typedef struct num num extern void displayarray const int a,const int n 顯示陣列元素值 extern void buildarray int a,const int n 陣列元素賦...

最大子陣列問題

每週堅持搞三種演算法問題,介紹一下最大子陣列問題 演算法思路 分治策略求解,將問題不斷分為更小的問題,進而求解 問題描述 求陣列中相連著的數 相加值最大,例如 輸出最大為2 3 4 21 22 define crt secure no warnigns include include include...