Python程式檢查有多少查詢找到有效的算術序列


假設我們有一個名為nums的數字列表,還有一個查詢列表。其中每個查詢元素包含[i, j]。因此,此查詢詢問nums從[i, j](包含兩端)的子列表是否為算術序列。所以最終我們必須找到返回true的查詢數量。

因此,如果輸入類似於nums = [2, 4, 6, 8, 7, 6, 5, 2] queries = [[3, 4],[0, 3],[2, 4]],則輸出將為2,因為[2, 4, 6, 8]是算術序列,所以查詢[0, 3]為真。並且對於[8, 7]也是算術序列,所以查詢[3, 4]也為真。但[6, 8, 7]不是算術序列,所以[2, 4]不為真。

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

  • 如果nums為空,則
    • 返回0
  • n := nums的大小
  • diff := 一個包含元素(nums[i + 1] - nums[i])的列表,對於範圍0到n - 2中的每個i
  • rle := 一個大小為(n - 1)並填充0的列表
  • 對於範圍0到n - 2中的每個i,執行以下操作:
    • 如果i > 0並且diff[i]與diff[i - 1]相同,則
      • rle[i] := rle[i - 1] + 1
    • 否則,
      • rle[i] := 1
  • ans := 0
  • 對於queries中的每個(i, j),執行以下操作:
    • 如果i與j相同,則
      • ans := ans + 1
    • 否則,
      • ans := ans + (如果rle[j - 1] >= (j - i),則為1,否則為0)
  • 返回ans

示例

讓我們看看以下實現以獲得更好的理解:

def solve(nums, queries):
   if not nums:
      return 0

   n = len(nums)
   diff = [nums[i + 1] - nums[i] for i in range(n - 1)]

   rle = [0] * (n - 1)
   for i in range(n - 1):
      if i > 0 and diff[i] == diff[i - 1]:
         rle[i] = rle[i - 1] + 1
      else:
         rle[i] = 1

   ans = 0
   for i, j in queries:
      if i == j:
         ans += 1
      else:
         ans += rle[j - 1] >= (j - i)
   return ans

nums = [2, 4, 6, 8, 7, 6, 5, 2]
queries = [[3, 4],[0, 3],[2, 4]]
print(solve(nums, queries))

輸入

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

輸出

2

更新於: 2021年10月16日

201 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告