สมมติว่ามีรายการตัวเลขที่ไม่ซ้ำชื่อ nums เราต้องหาเมทริกซ์ 2D ที่เรียงแล้ว โดยแต่ละรายการแทนช่วงรวมที่สรุปตัวเลขที่ติดต่อกันใน nums
เช่น ถ้าอินพุตคือ nums = [10, 11, 12, 15, 16, 17, 28, 30] ผลลัพธ์จะเป็น [[10, 12], [15, 17], [28, 28], [30, 30]]
ขั้นตอนการแก้ปัญหา
- เรียง nums
- เพิ่ม infinity เข้า nums
- ans := รายการใหม่, l := nums[0]
- for i ในช่วง 1 ถึง len(nums) ถ้า nums[i] != nums[i-1] + 1 ใส่ [l, nums[i-1]] เข้า ans, l := nums[i]
- คืนค่า ans
ตัวอย่างโค้ด
class Solution:
def solve(self, nums):
nums.sort()
nums.append(1e9)
ans = []
l = nums[0]
for i in range(1, len(nums)):
if nums[i] != nums[i-1] + 1:
ans.append([l, nums[i-1]])
l = nums[i]
return ans
ob = Solution()
nums = [10, 11, 12, 15, 16, 17, 28, 30]
print(ob.solve(nums))
อินพุต
[10, 11, 12, 15, 16, 17, 28, 30]
เอาต์พุต
[[10, 12], [15, 17], [28, 28], [30, 30]]