Linux root目錄空間過小,加大空間
阿新 • • 發佈:2020-11-16
題目描述
輸入一個整型陣列,數組裡有正數也有負數。陣列中的一個或連續多個整陣列成一個子陣列。求所有子陣列的和的最大值。要求時間複雜度為 O(n)
示例1
輸入
[1,-2,3,10,-4,7,2,-5]
返回值
18
說明
輸入的陣列為{1,-2,3,10,—4,7,2,一5},和最大的子陣列為{3,10,一4,7,2},因此輸出為該子陣列的和 18。
牛客編譯通過程式碼
1、程式碼
牛客的python環境為python 2.7
# -*- coding:utf-8 -*-
class Solution:
def FindGreatestSumOfSubArray (self, array):
array_max = array[0] #用來存放最大值
for i in range(1,len(array)):
if array[i-1] >= 0: #看前一個元素對其和有沒有貢獻,正數就加上,替換原來的元素,負數不變
array[i] += array[i-1]
else:
array[i] += 0
array_max = max(array_max,array[i]) # 再次選出和的最大值
return array_max
2、時長和記憶體
3、演算法思想
連續子陣列的最大和,即尋找最優解的問題,我們可以用’‘動態規劃’'的思想。每一步找到最優的區域性解,利用該最有區域性解再去求出下一步的最優解,直至求出全域性最優。
該程式碼中,我們直接在原始陣列上操作,我們最開始給定一個最大值array_max = array[0]。array[i]表示在該位置下的子序列元素和的最大值(並替換原始陣列中該位置的元素)
從第二個元素開始,每次看原陣列中的前一個元素對我們求和是否有貢獻,如果前一個元素為正數,則該位置元素加上前一個位置的元素為array[i] = array[i] + array[i-1]:如果前一個元素為負數,則該位置元素不變,仍為array[i]。每次迴圈後,比較array_max 和 array[i] 的大小進行最大值的更新,當遍歷完整個陣列,則array_max即為該陣列的子陣列的最大和。