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

โปรแกรมหาช่วงติดต่อของอาร์เรย์ที่ไม่ซ้ำใน Python

สมมติว่ามีรายการตัวเลขที่ไม่ซ้ำชื่อ 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]]