Python程式:查詢子陣列的最大絕對值和


假設我們有一個名為nums的陣列。我們需要找到子陣列[nums_l, nums_l+1, ..., nums_r-1, nums_r]的絕對值和,即|nums_l + nums_l+1 + ... + nums_r-1 + nums_r|。我們需要找到nums的任何子陣列的最大絕對值和(該子陣列可以為空)。

因此,如果輸入類似於nums = [2,-4,-3,2,-6],則輸出將為11,因為子陣列[2,-4,-3,2]具有最大絕對子陣列和|2 + (-4) + (-3) + 2| = 11。

為了解決這個問題,我們將遵循以下步驟:

  • n := nums的大小

  • ans := 0, temp := 0

  • 對於 i 從 0 到 n - 1,執行:

    • 如果 temp < 0,則

      • temp := 0

    • temp := temp + nums[i]

    • ans := ans 和 |temp| 的最大值

  • temp := 0

  • 對於 i 從 0 到 n - 1,執行:

    • 如果 temp > 0,則

      • temp := 0

    • temp := temp + nums[i]

    • ans := ans 和 |temp| 的最大值

  • 返回 ans

示例

讓我們來看下面的實現以更好地理解:

def solve(nums):
   n=len(nums)
   ans=0
   temp=0

   for i in range(n):
      if (temp<0):
         temp=0
   temp=temp+nums[i]
   ans=max(ans,abs(temp))

   temp=0
   for i in range(n):
      if (temp>0):
         temp=0
      temp=temp+nums[i]
      ans=max(ans,abs(temp))

   return ans

nums = [2,-4,-3,2,-6]
print(solve(nums))

輸入

[2,-4,-3,2,-6]

輸出

11

更新於:2021年10月6日

374 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.