คำอธิบายปัญหา
กำหนดลิสต์ nums ตรวจสอบว่า **ทุก sublist** มีองค์ประกอบอย่างน้อย 1 ตัวที่เกิดขึ้นเพียงครั้งเดียวใน sublist นั้น (unique element) ต้องแก้ใน O(n) time
ตัวอย่าง
nums = [5, 10, 20, 10, 0] → Output: True
ทุก sublist 15 ชุด มี element ที่ frequency = 1 อย่างน้อย 1 ตัว
ขั้นตอนการแก้ปัญหา (Divide & Conquer)
- ฟังก์ชัน
has_unique(left, right)ตรวจสอบช่วงnums[left:right+1] - นับความถี่ในช่วง → หากค่าต่ำสุด > 1 คืน False
- หาตำแหน่งที่มีค่า unique (freq=1) แบ่งปัญหาเป็นส่วนซ้ายและขวา เรียกซ้ำ
การตนการทำงาน (Python)
from collections import Counter
def solve(nums):
def has_unique(left, right):
if left >= right:
return True
counts = Counter(nums[left:right+1])
if min(counts.values()) > 1:
return False
start = left
for index in range(left, right + 1):
if counts[nums[index]] == 1:
if not has_unique(start, index - 1):
return False
start = index + 1
return has_unique(start, right)
return has_unique(0, len(nums) - 1)
nums = [5, 10, 20, 10, 0]
print(solve(nums)) # Output: True
อินพุต / เอาต์พุต
Input: [5, 10, 20, 10, 0] Output: True