สมมติว่าเรามีสองอาร์เรย์ (ไม่เติบโต) 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