在二進位制陣列中查詢需要替換為 1 的 0 的索引,以獲得最長的連續 1 序列 - Python篇(續集)


假設我們有一個二進位制陣列。我們必須找到可以替換為 1 的 0 的位置,以獲得最大數量的連續 1 序列。

因此,如果輸入類似於 [1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1],則輸出將為 10,因此陣列將變為 [1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1]。

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

  • i := 0,

  • n := A 的大小

  • count_left := 0, count_right := 0

  • max_i := -1, last_i := -1

  • count_max := 0

  • 當 i < n 時,執行:

    • 如果 A[i] 等於 1,則

      • count_right := count_right + 1

    • 否則,

      • 如果 last_i 不等於 -1,則

        • 如果 count_right + count_left + 1 > count_max,則

          • count_max := count_left + count_right + 1

          • max_i := last_i

      • last_i := i

      • count_left := count_right

      • count_right := 0

    • i := i + 1

  • 如果 last_i 不等於 -1,則

    • 如果 count_left + count_right + 1 > count_max,則

      • count_max := count_left + count_right + 1

      • max_i := last_i

  • 返回 max_i

示例

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

 線上演示

def find_max_one_index(A):
   i = 0
   n = len(A)
   count_left = 0
   count_right = 0
   max_i = -1
   last_i = -1
   count_max = 0
   while i < n:
      if A[i] == 1:
         count_right += 1
      else:
         if last_i != -1:
            if count_right + count_left + 1 > count_max:
               count_max = count_left + count_right + 1
               max_i = last_i
            last_i = i
            count_left = count_right
            count_right = 0
      i += 1
   if last_i != -1:
      if count_left + count_right + 1 > count_max:
         count_max = count_left + count_right + 1
         max_i = last_i
   return max_i
A = [1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1]
print(find_max_one_index(A))

輸入

[1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1]

輸出

10

更新於:2020年8月25日

253 次瀏覽

開啟您的職業生涯

完成課程獲得認證

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