Python程式:查詢數值對之間的最大距離


假設我們有兩個陣列(非增長的)nums1 和 nums2。索引對 (i, j) 其中 0 <= i < nums1 的大小,並且 0 <= j < nums2 的大小是有效的,如果 i <= j 且 nums1[i] <= nums2[j] 為真。對距離表示為 (j - i)。我們必須從每個有效對 (i,j) 中找到最大距離。如果沒有有效的對,則返回 0。

因此,如果輸入類似於 nums1 = [60,40,15,10,5],nums2 = [115,30,25,15,10],則輸出將為 1,因為這裡有效的對是 (0,0), (2,2), (2,3), (3,3), (3,4) 和 (4,4),這裡對於對 (2,3) 或對 (3,4) 最大距離為 1。

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

  • 如果 nums1 的最後一個元素 > nums2 的第一個元素,則

    • 返回 0

  • i := 0, j := 0 和 max_dist := 0

  • 當 i < nums1 的大小 時,執行

    • 如果 j < nums2 的大小 且 nums1[i] <= nums2[j],則

      • max_dist := max_dist 和 (j-i) 的最大值

      • j := j + 1

    • 否則,

      • j := j + 1

      • i := i + 1

  • 返回 max_dist

示例

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

def solve(nums1, nums2):
   if nums1[len(nums1)-1] > nums2[0]:
      return 0

   i = j = max_dist = 0
   while i < len(nums1):
      if j < len(nums2) and nums1[i] <= nums2[j]:
         max_dist = max(max_dist, j-i)
         j += 1

      else:
         j += 1
         i += 1

   return max_dist

nums1 = [60,40,15,10,5]
nums2 = [115,30,25,15,10]
print(solve(nums1, nums2))

輸入

[60,40,15,10,5], [115,30,25,15,10]

輸出

1

更新於: 2021年10月8日

567 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.