最大欄位和演算法:
這個演算法在本學期的課程中,已經稍作了解。不過印象不夠深刻。今天重新複習一下,加深理解。
最大欄位和,無非就是三種情況:
①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...