Python 計數優質子陣列的程式


假設我們有一個名為 nums 的陣列和另一個值 k。我們必須找到優質子陣列的數量。如果子陣列中包含 k 個奇數,則稱該子陣列為優質子陣列。

因此,如果輸入類似於 nums = [1,1,2,1,1],k = 3,則輸出將為 2,因為有兩個子陣列 [1,1,2,1] 和 [1,2,1,1]。

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

  • odd_i := 新列表

  • 對於 i 從 0 到 nums 大小 - 1,執行:

    • 如果 nums[i] mod 2 等於 1,則

      • 將 i 插入到 odd_i 的末尾

  • start := 0, end := k - 1

  • i := 0

  • count := 0

  • 當 end < odd_i 大小時,執行:

    • 如果 end 等於 odd_i 大小 - 1,則

      • j := nums 大小 - 1

    • 否則,

      • j := odd_i[end + 1] - 1

    • count := count +(odd_i[start] - i + 1) *(j - odd_i[end] + 1)

    • i := odd_i[start] + 1

    • start := start + 1

    • end := end + 1

  • 返回 count

示例

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

def solve(nums, k):
   odd_i = []
   for i in range(len(nums)):
      if nums[i] % 2 == 1:
         odd_i.append(i)
   start = 0
   end = k - 1
   i = 0
   count = 0
   while end < len(odd_i):
      if end == len(odd_i) - 1:
         j = len(nums) - 1
      else:
         j = odd_i[end + 1] - 1
      count = count + (odd_i[start] - i + 1) * (j - odd_i[end] + 1)
      i = odd_i[start] + 1
      start = start + 1
      end = end + 1
   return count

nums = [1,1,2,1,1]
k = 3
print(solve(nums, k))

輸入

[1,2,3,4,5,6,7,8]

輸出

2

更新於:2021年10月7日

706 次瀏覽

開啟您的 職業生涯

完成課程獲得認證

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