劍指Offer 連續子陣列的最大和

2021-08-07 10:45:00 字數 916 閱讀 1848

/**

* @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個開始,到第...