สมมติว่าเรามี k รายการที่แตกต่างกัน มีการจัดเรียงองค์ประกอบ เราต้องค้นหาช่วงที่เล็กที่สุดที่มีอย่างน้อยหนึ่งหมายเลขจากแต่ละรายการที่แตกต่างกัน k ที่นี่ช่วง [a,b] มีขนาดเล็กกว่าช่วง [c,d] เมื่อ b-a
ดังนั้นหากอินพุตเป็น [[4,10,15,25,26],[0,9,14,20],[5,18,24,30]] ผลลัพธ์จะเป็น [14, 18]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
minRange :=inf, maxRange :=-inf, rangeSize :=inf, tempMinRange :=inf, tempMaxRange :=-inf
n :=ขนาดของ nums
กำหนดตัวชี้อาร์เรย์ขนาด n
จัดลำดับความสำคัญ pq
สำหรับการเริ่มต้น i :=0 เมื่อ i
แทรก { nums[i, 0], i } ลงใน pq
tempMaxRange :=สูงสุดของ tempMaxRange และ nums[i, 0]
ในขณะที่ 1 ไม่ใช่ศูนย์ ให้ทำ -
กำหนดหนึ่งคู่ temp :=ด้านบนของ pq
ลบองค์ประกอบออกจาก pq
tempMinRange :=temp.first
idx :=องค์ประกอบที่สองของอุณหภูมิ
ถ้า tempMaxRange - tempMinRange
rangeSize :=tempMaxRange - tempMinRange
minRange :=tempMinRange
maxRange :=tempMaxRange
(เพิ่มพอยน์เตอร์[idx] 1)
ถ้าพอยน์เตอร์[idx] เท่ากับขนาดของ nums[idx] ดังนั้น −
ออกจากวง
มิฉะนั้น
tempMaxRange :=สูงสุดของ tempMaxRange และ nums[idx, pointers[idx]]
แทรก { nums[idx, pointers[idx]], idx } ลงใน pq
กำหนดอาร์เรย์ขนาด 2
ans[0] :=minRange, ans[1] :=maxRange
กลับมาอีกครั้ง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
#include
อินพุต
<ก่อน>{{4,10,15,25,26},{0,9,14,20},{5,18,24,30}}; ผลลัพธ์
[14, 18, ]