2 14 求陣列的子陣列之和的最大值

2022-06-07 01:06:08 字數 1350 閱讀 6091

解法:

解法 : 動態規劃

動態規劃

狀態定義 : dp[i] 表示包含第i個元素的最大子序和

狀態轉移方程:dp[i] = max

初始狀態:dp[0] = nums[0];

// 2.14 求陣列的子陣列之和的最大值

class test;

print(arr);

system.out.println(maxsubarray2(arr));

print(maxsubarraypos(arr));

} public static void print(int arr)

/**動態規劃

狀態定義

dp[i] 表示包含第i個元素的最大子序和

狀態轉移方程

dp[i] = max

初始狀態:

dp[0] = nums[0];

*/public static int maxsubarray(int nums)

int res = integer.min_value;

for(int num:dp) res = math.max(num,res);

return res;

}/**

拓展問題:

1 如果陣列[a[0], ...,a[n-1]]首尾相連,題目又該如何解釋?

2 如果題目要求同時返回最大子陣列的位置,演算法應該如何改變?還能保持$o(n)$的時間複雜度麼?

*//**

拓展問題1:

*/public static int maxsubarray2(int nums)

int res = integer.min_value;

for(int num:dp) res = math.max(num,res);

return res;

}/**

拓展問題2:

return [start,end]

*/public static int maxsubarraypos(int nums)

int max = integer.min_value;

for(int num:dp) max = math.max(max,num);

int res = new int[2];

for(int i = 0;iint start;

for(start= res[1];max!=0;start--) max-=nums[start];

res[0] = start-1;

return res;

}}

程式設計之美2 14 求陣列的子陣列之和的最大值

問題描述 乙個有n個整數元素的一維陣列 a 0 a 1 a n 1 它包含很多子陣列,求子陣列之和的最大值,當陣列元素全部為負的時候,有兩種處理辦法,第一種是返回0,第二種是返回陣列中最大的負數。解法1 使用暴力法,假設最大的一段陣列為a i a j 則對i 0 n 1 j i n 1,遍歷一遍,求...

程式設計之美2 14 求陣列的子陣列之和的最大值

這是乙個在面試中出現概率很高的一道題目,就拿我來說吧,面試了5家公司中,兩家公司問了這道題目,可見,這道題目是非常經典的。解題思想也不是很難,我熟悉的有 兩種解題辦法 1.一直連加,終止當前序列的條件是連加的和是負數 因為,乙個數加上乙個負數之後肯定是沒有原來的數值大,所以,這肯定是沒有意義的,最終...

程式設計之美 2 14 求陣列的子陣列之和的最大值

這個以前寫過,見求陣列的最長子陣列之和的最大值 這裡說一下後面擴充套件題目。1.簡述 1 如果陣列首尾相連,即允許找到一組數字 a i a n 1 a 0 a j 請使其和最大,怎麼辦?2 如果題目要求返回最大子陣列的位置,演算法應該如何改變?還能保持o n 的複雜度麼?2.思路 第乙個問題,書上給...