iT邦幫忙

2022 iThome 鐵人賽

DAY 10
0
自我挑戰組

Udemy課程上完你也可以開始Codewars 30天系列 第 10

[Day10] Codewars >>> Maximum subarray sum (Python)

  • 分享至 

  • xImage
  •  

題目(5kyu):

The maximum sum subarray problem consists in finding the maximum sum of a contiguous >subsequence in an array or list of integers:

max_sequence([-2, 1, -3, 4, -1, 2, 1, -5, 4])
# should be 6: [4, -1, 2, 1]

Easy case is when the list is made up of only positive numbers and the maximum sum is >the sum of the whole array. If the list is made up of only negative numbers, return 0 >instead.

Empty list is considered to have zero greatest sum. Note that the empty list or array >is also a valid sublist/subarray.

解題思路

題目理解:給定一個元素皆為數字的列表arr,找到該列表所有連續組合中最大總和,並返還該總和。如果列表內皆為負數或為空列表,則返還0。
所有的連續子集合必存在起始索引位置i&結束位置索引k,故需利用巢狀迴圈找出所有i&k匹配組合,取其sum(arr[i:k])值最大者。

def max_sequence(arr):
    #若為空集合則返還0
    if arr == []:
        return 0
    all_sum = []
    #第一層for迴圈遍歷所有起始索引i的可能性
    for i in range(len(arr)):
        #第二層for迴圈遍歷所有結束索引k的可能性
        for k in range(len(arr)):
            #若k<i則該子即視作[]故不影響計算,須留意list[a:b]僅包含到b-1,故需+1
            all_sum.append(sum(arr[i:k+1]))
    #若最大和小於0,代表arr內皆為負數故返還0
    if max(all_sum)<0:
        return 0
    return max(all_sum)

上一篇
[Day9] Codewars >>> Playing with digits (Python)
下一篇
[Day11] Codewars >>> RGB To Hex Conversion (Python)
系列文
Udemy課程上完你也可以開始Codewars 30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言