Python程式:尋找使陣列公平的方法


假設我們有一個名為nums的陣列。我們可以選擇一個索引並刪除該索引處的元素。(刪除元素後,元素的索引可能會發生變化)。當奇數索引值的和等於偶數索引值的和時,我們可以說一個數組是公平的。我們必須找到可以選擇的索引數量,以便在刪除後,nums是公平的。

因此,如果輸入類似於nums = [5,3,7,2],則輸出為

  • 從索引0刪除,陣列為[3,7,2],偶數位置和:3+2 = 5,奇數位置和7(不公平)

  • 從索引1刪除,陣列為[5,7,2],偶數位置和:5+2 = 7,奇數位置和7(公平)

  • 從索引2刪除,陣列為[5,3,2],偶數位置和:5+2 = 7,奇數位置和3(不公平)

  • 從索引3刪除,陣列為[5,3,7],偶數位置和:5+7 = 12,奇數位置和3(不公平)

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

  • res := 0, sm1 := 0, sm2 := 0
  • 對於範圍從1到nums大小-1的i,執行以下操作:
    • 如果i為偶數,則
      • sm1 := sm1 + nums[i]
    • 否則,
      • sm2 := sm2 + nums[i]
  • 如果sm1等於sm2,則
    • res := res + 1
  • 對於範圍從1到nums大小-1的i,執行以下操作:
    • 如果i為奇數,則
      • sm1 := sm1 - nums[i] + nums[i-1]
    • 否則,
      • sm2 := sm2 - nums[i] + nums[i-1]
    • 如果sm1等於sm2,則
      • res := res + 1
  • 返回res

示例

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

def solve(nums):
   res, sm1, sm2 = 0, 0, 0
   for i in range(1, len(nums)):
      if i%2 == 1:
         sm1 += nums[i]
      else:
         sm2 += nums[i]
   if sm1 == sm2:
      res += 1

   for i in range(1, len(nums)):
      if i % 2 == 1:
         sm1 = sm1 - nums[i] + nums[i-1]
      else:
         sm2 = sm2 - nums[i] + nums[i-1]
      if sm1 == sm2:
         res += 1

   return res

nums = [5,3,7,2]
print(solve(nums))

輸入

[5,3,7,2]

輸出

1

更新於:2021年10月5日

286 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告