สมมติว่าเรามีรายการของช่วงเวลาที่แต่ละรายการแทนช่วงเวลา [เริ่มต้น, สิ้นสุด] (รวม) เราต้องหาระยะเวลาที่ไม่ซ้ำกันทั้งหมดที่ครอบคลุม
ดังนั้น ถ้าอินพุตเหมือนช่วง =[[2, 11],[13, 31],[41, 61]] เอาต์พุตจะเป็น 50 เนื่องจากระยะทางที่ครอบคลุมทั้งหมดที่ไม่ซ้ำกันคือ (11 - 2 + 1) =10 จากนั้น (31 - 13 + 1) =19 และ (61 - 41 + 1) =21 ดังนั้นยอดรวมคือ 50
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ถ้ารายการช่วงเวลาว่างเปล่า ดังนั้น
- คืน 0
- เรียงช่วงรายการ
- [เริ่ม สิ้นสุด] :=ช่วงเวลา[0]
- ตอบ :=0
- สำหรับการเริ่มต้นและสิ้นสุดแต่ละครั้ง (s, e) ในช่วงเวลา ให้ทำ
- ถ้า s> จบ แล้ว
- ans :=ans + end - start + 1
- start :=s, end :=e
- มิฉะนั้น
- สิ้นสุด :=สูงสุดของจุดสิ้นสุด e
- ถ้า s> จบ แล้ว
- ans :=ans + end - start + 1
- คืนสินค้า
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution: def solve(self, intervals): if not intervals: return 0 intervals.sort() start, end = intervals[0] ans = 0 for s, e in intervals: if s > end: ans += end - start + 1 start = s end = e else: end = max(end, e) ans += end - start + 1 return ans ob = Solution() intervals = [[2, 11],[13, 31],[41, 61]] print(ob.solve(intervals))
อินพุต
[[2, 11],[13, 31],[41, 61]]
ผลลัพธ์
50