Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมค้นหาระยะทางสูงสุดระหว่างคู่ของค่าใน 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) ระยะทางสูงสุดในที่นี้คือ 1 สำหรับคู่ใดคู่หนึ่ง (2,3) หรือคู่ (3, 4)

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • ถ้าองค์ประกอบสุดท้ายของ nums1> องค์ประกอบแรกของ nums2 แล้ว

    • คืนค่า 0

  • ผม :=0, j :=0 และ max_dist :=0

  • ในขณะที่ฉัน <ขนาดของ nums1 ทำ

    • ถ้า j <ขนาดของ nums2 และ nums1[i] <=nums2[j] แล้ว

      • max_dist :=สูงสุดของ max_dist และ (j-i)

      • เจ :=เจ + 1

    • มิฉะนั้น

      • เจ :=เจ + 1

      • ผม :=ผม + 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