簡體   English   中英

找到每個子數組的最小值並返回這些最小值的最大值

[英]Find the minimum values for each subarray and return the maximum of these minima

我試圖在數組 arr 中找到每個大小為 x 的子數組的最小值,返回一個表示這些最小值的最大值的整數。

這是我到目前為止所擁有的:

def segment(x, arr): 
    n = len(arr) 
    if (n < x): 
        return -1
    res = 0
    for i in range(x): 
        res += arr[i] 
    curr_sum = res 
    for i in range(x, n): 
        curr_sum += arr[i] - arr[i-x] 
        res = max(res, curr_sum) 
    return res 
segment(2,[8,2,4])
Output = 10
Expected output = 2

有人可以幫我解決我所缺少的嗎? 我想我的代碼正在尋找最大和而不是最小子數組的最大值。

當大小x = 1時它完美地工作。

謝謝。

我不太確定你問題的措辭。 我假設您的意思是arr每個長度為x連續子arr

所以在這個例子中, arr = [8,2,4]所以你有子arr = [8,2,4] [8,2][2,4] 每個子數組的最小值為 2,因此最大值為 2。

def segment(x, arr): 
    n = len(arr) 
    if (n < x): 
        return -1
    segment_mins = []
    for i in range(n-x+1): 
        segment_mins.append(min(arr[i:i+x]))
    return max(segment_mins)

編輯:您可以通過在一行中執行來實現加速

def segment(x, arr): 
    n = len(arr) 
    if (n < x): 
        return -1
    return max(min(arr[i:i+x]) for i in range(n-x+1))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM