LeetCode 面試題16 17 最大連續子串行

2021-10-05 22:22:58 字數 1619 閱讀 8396

給定乙個整數陣列,找出總和最大的連續數列,並返回總和。

輸入: [-2,1,-3,4,-1,2,1,-5,4]

輸出: 6

解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6。

class

solution

:def

maxsubarray

(self, nums)

: n =

len(nums)

dp =

[num for num in nums]

for i in

range(1

, n)

:if nums[i]

>=0:

dp[i]

= dp[i -1]

+ nums[i]

else

: dp[i]

= nums[i]

return

max(dp)

遞迴計算左半部分的最大連續和,最右部分的最大連續和以及中間部分的最大連續和,結果為其中的最大者。

class

solution

:def

maxsubarray

(self, nums)

:def

divide

(nums, left, right)

:if left == right:

return nums[left]

mid = left +

(right - left)//2

# 左半部分的最大和

sum_left = divide(nums, left, mid)

# 右半部分的最大和

sum_right = divide(nums, mid +

1, right)

# 求中間部分的最大和

# 先求中間偏左部分的最大和

left_sum, max_left_sum =0,

-99999

for i in

range

(mid, left -1,

-1):

left_sum += nums[i]

max_left_sum =

max(left_sum, max_left_sum)

# 再求中間偏右部分的最大和

right_sum, max_right_sum =0,

-99999

for i in

range

(mid +

1, right +1)

: right_sum += nums[i]

max_right_sum =

max(right_sum, max_right_sum)

return

max(sum_left, sum_right, max_left_sum + max_right_sum)

ifnot nums or

len(nums)==0

:return

0return divide(nums,0,

len(nums)-1

)

leetcode 面試題專題

面試題51.陣列中的逆序對 在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。利用歸併排序,將陣列分成兩部分,前面一部分和後面一部分,進行歸併的時候,需要比較兩個陣列的數值大小,如果第二個陣列的值小的話,代表前乙個陣列剩下的都...

位元組面試題 leetcode

給定乙個迴圈陣列 最後乙個元素的下乙個元素是陣列的第乙個元素 輸出每個元素的下乙個更大元素。數字 x 的下乙個更大的元素是按陣列遍歷順序,這個數字之後的第乙個比它更大的數,這意味著你應該迴圈地搜尋它的下乙個更大的數。如果不存在,則輸出 1。示例 1 輸入 1,2,1 輸出 2,1,2 解釋 第乙個 ...

leetcode面試題 08 11 硬幣

硬幣。給定數量不限的硬幣,幣值為25分 10分 5分和1分,編寫 計算n分有幾種表示法。結果可能會很大,你需要將結果模上1000000007 示例1 輸入 n 5 輸出 2 解釋 有兩種方式可以湊成總金額 5 55 1 1 1 1 1 示例2 輸入 n 10 輸出 4 解釋 有四種方式可以湊成總金額...