小周周六溫習一下
問題
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array [-2,1,-3,4,-1,2,1,-5,4],
the contiguous subarray [4,-1,2,1] has the largest sum = 6.
思路
畢竟是道easy的,很快想出解決方案,不過還是很典型膜蛔。
看到這個題目學過動態(tài)規(guī)劃的應該都知道該往上面靠了摹菠。
分下下題目要求的是連續(xù)數(shù)組最大值,這就好辦多了啊.
稍微想一下遞推公式f(x)=f(x-1) > 0 ? f(x-1)+a[x] : a[x]
同時順帶著記錄最大值就OK了券册。
代碼
class Solution {
public int maxSubArray(int[] nums) {
//算f(x)的時候根據(jù)f(x-1)的值來判斷
int[]maxArray = new int[nums.length]; //記錄下之前的最優(yōu)結果
maxArray[0]=nums[0]; //處理好baseCase
int max = nums[0];
for(int i=1;i<nums.length;i++){
if(maxArray[i-1]>0){
maxArray[i]=maxArray[i-1]+nums[i];
}else{
maxArray[i]=nums[i];
}
if(maxArray[i]>max){
max = maxArray[i];
}
}
return max;
}
}
從代碼里面額外的數(shù)組來記錄可以看到,動態(tài)規(guī)劃的空間換時間。O(n)就可以解決問題疟丙。