1. 程式人生 > 實用技巧 >Linux root目錄空間過小,加大空間

Linux root目錄空間過小,加大空間

技術標籤:牛客網刷題python演算法

題目描述

輸入一個整型陣列,數組裡有正數也有負數。陣列中的一個或連續多個整陣列成一個子陣列。求所有子陣列的和的最大值。要求時間複雜度為 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即為該陣列的子陣列的最大和。