題目:給乙個陣列,讓求連續陣列元素的最大和。
public int maxsumofsubarray (int arr)
思路:
連續子陣列的最大和動態規劃 dp[i]
dp[i]表示以arr[i]結尾的連續子陣列的最大和。arr[i]必須加上,就不判斷arr[i]是正還是負。
dp[i]等於arr[i]加上以上乙個元素為結尾的最大和dp[i-1],但是需要判斷dp[i-1]的正負,如果是正的則加上,負的就不加,加0。
時間複雜度為o(n),空間複雜度為o(1),所以只能在arr上修改,不能建立新陣列dp。
動態規劃都不建立dp,省o(n)空間。都不修改原arr,只用中間變數來儲存中間結果。
新(不修改arr陣列,只用中間變數儲存中間結果):
/*
動態規劃,不用建立dp省空間,而且不用修改原陣列arr。
只用幾個中間變數儲存中間的值。
*/public
int maxsumofsubarray2 (
int[
] arr)
return maxsum;
}
舊(修改arr陣列):
/*
求子陣列的最大和 動態規劃 dp[i]
dp[i]表示以arr[i]元素結尾的子陣列的最大和。
arr[i]必須加上,所以不判斷arr[i]的正負
dp[i]等於arr[i]加上dp[i-1],也就是之前元素和的最大值
所以判斷dp[i-1]的正負,正的話就加上,負的話就不加,加0
時間複雜度為o(n),空間複雜度為o(1),所以只能在arr上修改
*/public
int maxsumofsubarray (
int[
] arr)
return maxsum;
}
陣列3 連續子陣列的最大和
題目 找到陣列1 2 3 10 4 7 2 5中的最大和 思路 1 如果前面的和為負值,則加上會使得sum 0,因此要從當前開始重新加 2 動態規劃方法 遞迴 設sum i 為前i個元素中,包含第i個元素且和最大的連續子陣列,result 為已找到的子陣列中和最大的。對第i 1個元素有兩種選擇 做為...
27 連續子陣列的最大和
連續子陣列的最大和 hz偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了 在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如 連續子向量的最大和為8...
30 連續子陣列的最大和
題目描述 hz偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了 在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如 連續子向量的最大和為8 從第0個...