/**
* @author tom qian
* @email [email protected]
* @github
* @date 2023年8月22日
*/ //要求:hz偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了:
// 在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。
// 但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?
// 例如:,連續子向量的最大和為8(從第0個開始,到第3個為止)。
//你會不會被他忽悠住?(子向量的長度至少是1)
/* 思路:
來自這裡——動態規劃思路求解
kadane演算法又被稱為掃瞄法,為動態規劃(dynamic programming)的乙個典型應用。我們用dp來解決最大子陣列和問題:對於陣列a,用ci
標記子陣列a[0..i]的最大和,那麼則有ci
=max
子陣列最大和即為ma
xci 。kadane演算法比上面dp更進一步,不需要用乙個陣列來記錄中間子陣列和。通過觀察容易得到:若ci
−1≤0
,則ci
=ai 。用e表示以當前為結束的子陣列的最大和,以替代陣列c;那麼
e=max
由此,我們可以回答題目要求中的問題:
根據動態規劃的思想,若前面的最大連續子陣列為負了,那麼完全不需要考慮用下乙個數來彌補它,因為前面的子陣列加上新的元素只會比新的元素更小,那麼新的元素自身就構成乙個最大連續子陣列。動態規劃的巧妙之處在這裡體現的淋漓盡致!
public class 連續子陣列的最大和
return sum;
}}
劍指offer 連續子陣列最大和
題目 對於乙個有正有負的整數陣列,請找出總和最大的連續數列。給定乙個int陣列a和陣列大小n,請返回最大的連續數列的和。1.思路 1 定義兩個變數,乙個儲存最終的最大和,乙個是臨時變數,不能初始化為0,初始化都為陣列第乙個數 防止都是負數,它的和肯定是負數 2 for迴圈依次向後遍歷,如果tmp臨時...
劍指offer 連續子陣列最大和
hz偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了 在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如 連續子向量的最大和為8 從第0個開始,到第...
《劍指offer》連續子陣列的最大和
hz偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了 在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如 連續子向量的最大和為8 從第0個開始,到第...