最大欄位和演算法

2021-08-04 16:42:00 字數 844 閱讀 2185

最大欄位和演算法:

這個演算法在本學期的課程中,已經稍作了解。不過印象不夠深刻。今天重新複習一下,加深理解。

最大欄位和,無非就是三種情況:

①max在左半部分

②max在右半部分

③max在中間

①②均可以使用遞迴來解決,情況三也並不是很複雜。先附上**,然後逐條解釋。

public class solution

return helper(nums,0,nums.length-1);

}

public int helper(int nums, int left, int right)

//接下來分別考慮左右兩部分,遞迴方法進行解決

int mid=left+(right-left)/2;

int leftmax=helper(nums,left,mid-1);

int rightmax=helper(num//,mid+1,right);

//接下來記錄中間值mid,中間值單獨留出來即可,留作第三種情況進行處理

int max=nums[mid];

//暫存max,之所已暫存,只是為了方便

int t=max;

//接下來考慮第三種情況

for(int i=mid-1;i>=left;i--)

//第二次暫存max

t=max;

for(int i=mid+1;i<=right;i++)

return math.max(max,math.max(leftmax,rightmax));

}}

第三種情況重新解釋:

最大欄位和

include include include include include using namespace std 最大欄位和問題描述 給定n個整數 可能為負數 組成的序列a 1 a 2 a 3 a n 求該序列如a i a i 1 a j 的子段和的最大值。當所給的整均為負數時定義子段和為0,...

最大欄位和

1049 最大子段和 難度 基礎題 n個整數組成的序列a 1 a 2 a 3 a n 求該序列如a i a i 1 a j 的連續子段和的最大值。當所給的整數均為負數時和為0。例如 2,11,4,13,5,2,和最大的子段為 11,4,13。和為20。input 第1行 整數序列的長度n 2 n 5...

最大欄位和

題目描述 給出一段序列,選出其中連續且非空的一段使得這段和最大。輸入格式 第一行 是乙個正整數n,表示了序列的長度。第二行 包含n個整數num i 描述了這段序列。輸出格式 第一行 乙個整數,為最大的子段和是多少。第二行 起始位置和終止位置 輸入樣例 72 4 3 1 2 4 3 輸出樣例 43 5...