劍指Offer:JZ30-連續子陣列最大和(解題思路+Java程式碼)
JZ30-連續子陣列最大和
題目:HZ偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了:在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如:{6,-3,-2,7,-15,1,2,2},連續子向量的最大和為8(從第0個開始,到第3個為止)。給一個陣列,返回它的最大連續子序列的和,你會不會被他忽悠住?(子向量的長度至少是1)
求陣列中連續最大和問題(動態規劃演算法)
解題思路:先設定最大和為Integer最小數,之前和為0,判斷如果之前和為負數直接捨棄(負數越加越小),重新設定為0,計算當前和,如果當前和大於最大和,最大和更新,最後將陣列全部走一遍之後,返回最大值。
/**
* @author 楓葉火火
*/
import java.util.Scanner;
public class Solution {
//定義max用於儲存當前最大值
private int maxSum = Integer.MIN_VALUE;
public int FindGreatestSumOfSubArray(int[] array) {
//尋找最大值
findMaxSum(array, 0, 0);
return maxSum;
}
//尋找最大值
private void findMaxSum( int[] array, int index, int sum){
//陣列越界直接返回
if(index == array.length){
return;
}
//如果當前和為負數,直接捨棄之前的的和重新計算
if(sum < 0){
sum = 0;
}
//更新當前和值,與最大和最對比
sum += array[index];
if(sum > maxSum){
maxSum = sum;
}
//處理下一個值
findMaxSum(array, index+1,sum);
}
public static void main(String[] args) {
Solution solution = new Solution();
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] array = new int[n];
for(int i = 0 ; i < n ; i++){
array[i] = scanner.nextInt();
}
int sum = solution.FindGreatestSumOfSubArray(array);
System.out.println(sum);
}
}
相關文章
- 【劍指offer】連續子陣列的最大和陣列
- 劍指offer-例題 連續子陣列的最大和陣列
- 劍指 Offer 42.連續子陣列的最大和陣列
- 劍指Offer-連續子陣列中的最大和陣列
- 《劍指Offer》- 連續子陣列的最大和或最小和陣列
- 劍指office--31. 連續子陣列的最大和陣列
- 連續子陣列的最大和陣列
- Maximum Subarray 連續子陣列最大和陣列
- 牛客題霸--連續子陣列的最大和陣列
- [每日一題] 第十五題:連續子陣列的最大和每日一題陣列
- 劍指 offer(1) -- 陣列篇陣列
- JZ-030-連續子陣列的最大和陣列
- 每日一練(22):連續子陣列的最大和陣列
- 【劍指offer】 第三題 二維陣列查詢陣列
- 劍指offer之順序列印陣列陣列
- 【劍指offer】陣列中的逆序對陣列
- 【劍指offer】調整陣列順序陣列
- 劍指Offer題解合集
- 劍指Offer-37-陣列中逆序對陣列
- 《劍指offer》:[52]構建乘積陣列陣列
- 【劍指offer】把陣列排成最小的數陣列
- [劍指offer題解][Java]陣列中出現次數超過一半的數字Java陣列
- 劍指 offer 第一題: 二維陣列中的查詢陣列
- 《劍指offer》JAVA題解,LeetCode評測JavaLeetCode
- 劍指offer:旋轉陣列的最小數字陣列
- 【劍指offer】二維陣列中的查詢陣列
- 劍指offer 旋轉陣列的最小數字陣列
- 【劍指offer】旋轉陣列的最小值陣列
- 【演算法拾遺】三種方法求連續子陣列的最大和演算法陣列
- [劍指offer] JAVA版題解(完整版)更新中。。。Java
- 劍指Offer--陣列中重複的數字陣列
- 劍指Offer-34-把陣列排成最小的數陣列
- 劍指offer——把陣列排成最小的數C++陣列C++
- 劍指offer——陣列中的逆序對C++(75%)陣列C++
- 【劍指offer】【1】二維陣列中的查詢陣列
- 劍指offer-轉陣列的最小數字-php陣列PHP
- 《劍指offer》:[51]陣列中的重複數字陣列
- 【劍指offer】二分查詢二維陣列陣列