我是競爭性編程的新手。我在解決以下問題時遇到了麻煩。
問題是你給出了一個陣列或串列。還有一個數字 M,現在你必須找到大小為 M 且總和最大的連續子陣列。
例如,如果 list 是 4,6,10,8,2,1 并且 M=3 那么最大的總和視窗將是 6,8,10 ,即總和等于 24 。所以答案將是 24
有人可以幫我解決這個問題嗎?
uj5u.com熱心網友回復:
l=[4,6,10,8,2,1]
ans=0
m=3
for i in range(len(l) 1):
for j in range(i):
if len(l[j:i])==m:
ans=max(ans,sum(l[j:i]))
print(ans)
查找串列的子串列并將子串列的總和存盤在變數中
uj5u.com熱心網友回復:
您可以編輯串列并依次洗掉最大的數字:
list = [4,6,10,8,2,1]
M = 3
result = 0
# to get unique elements
new_list = set(list)
for i in range(M):
result = max(new_list)
# removing the largest element from new_list
new_list.remove(max(new_list))
print(result)
uj5u.com熱心網友回復:
- 首先想到一個蠻力解決方案。在這里很簡單,我們可以使用兩個 for 回圈(嵌套)找到答案。外回圈將標記為起點,內回圈將轉到下一個 M 元素。
- 現在是困難的部分,即優化。由于它是固定大小的連續子陣列,您可以使用兩個指標(例如左右)制作固定大小的視窗(此處為 M)并保持視窗的大小并繼續向右移動并繼續計算總和并更新 ans如果需要的話。
sum = 0
for i in range(M):
sum = arr[i]
ans = sum
for i in range(M, len(arr)):
sum = arr[i] - arr[i-M]
ans = max(res, sum)
return ans
- 當然,我們必須檢查一些極端情況,例如 M 是否大于陣列大小或 M=0
uj5u.com熱心網友回復:
我試過這個解決方案:
l = [4,6,1,8,2,1]
M = 3
largest_sum = -1
output = []
# Getting all possible sequences of M numbers
for i in range(len(l)):
if (res:=sum(l[i:i 3])) > largest_sum:
largest_sum = res
output = l[i:i 3]
print(f"Largest sum is {largest_sum} from array {output}")
輸出:
Largest sum is 15 from array [6, 1, 8]
它可能不是最有效的演算法,但它確實有效。我得到所有可能的長度為 M 的序列并存盤最大的和。
注意:它也適用于 @zeeshan12396 案例。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/434096.html
標籤:Python python-3.x python-2.7 python-3.8
上一篇:Python字典-更優化
