牛客刷題 python 連續子陣列的最大和

2021-10-11 18:09:47 字數 1162 閱讀 7657

輸入乙個整型陣列,陣列裡有正數也有負數。陣列中的乙個或連續多個整數組成乙個子陣列。求所有子陣列的和的最大值。要求時間複雜度為 o(n)

輸入[1,-2,3,10,-4,7,2,-5]

返回值18

說明輸入的陣列為,和最大的子陣列為,因此輸出為該子陣列的和 18。

牛客的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]

)# 再次選出和的最大值

連續子陣列的最大和,即尋找最優解的問題,我們可以用』『動態規劃』'的思想。每一步找到最優的區域性解,利用該最有區域性解再去求出下一步的最優解,直至求出全域性最優。

該**中,我們直接在原始陣列上操作,我們最開始給定乙個最大值array_max = array[0]。array[i]表示在該位置下的子串行元素和的最大值(並替換原始陣列中該位置的元素)

從第二個元素開始,每次看原陣列中的前乙個元素對我們求和是否有貢獻,如果前乙個元素為正數,則該位置元素加上前乙個位置的元素為array[i] = array[i] + array[i-1]:如果前乙個元素為負數,則該位置元素不變,仍為array[i]。每次迴圈後,比較array_max 和 array[i] 的大小進行最大值的更新,當遍歷完整個陣列,則array_max即為該陣列的子陣列的最大和。

牛客刷題 子陣列最大累加和

題目 給定乙個陣列arr,返回子陣列的最大累加和 例如,arr 1,2,3,5,2,6,1 所有子陣列中,3,5,2,6 可以累加出最大的和12,所以返回12.題目保證沒有全為負數的資料 要求 時間複雜度為o n o n 空間複雜度為o 1 o 1 在進行累加和判斷的時候首先需要明確,如果到目前為止...

牛客刷題 陣列求和

第一題 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。解題思路 public class solution int target 9 solution s new solution s.twosum nums,target...

牛客 連續子陣列的總和

題目描述 hz偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了 在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如 連續子向量的最大和為8 從第0個...