สมมติว่าเรามีรายการตัวเลขที่เรียกว่า nums เราต้องตรวจสอบว่าทุกหมายเลขสามารถจัดกลุ่มโดยใช้กฎข้อใดข้อหนึ่งต่อไปนี้:1. คู่ที่อยู่ติดกัน (a, a) 2. แฝดสามที่อยู่ติดกัน (a, a, a) 3. ต่อเนื่องกัน แฝดสาม (a, a + 1, a + 2)
ดังนั้น หากอินพุตมีค่าเท่ากับ nums =[7, 7, 3, 4, 5] ผลลัพธ์จะเป็น True เนื่องจากเราสามารถจัดกลุ่ม [7, 7] เข้าด้วยกันและ [3, 4, 5] เข้าด้วยกันได้พี>
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
n :=ขนาดของ nums
-
dp :=รายการขนาด n+1 ค่าแรกเป็นจริง อื่น ๆ เป็นเท็จ
-
สำหรับผมอยู่ในช่วง 2 ถึง n ทำ
-
ถ้า i>=2 และ dp[i − 2] ไม่ใช่ 0 แล้ว
-
ถ้า nums[i − 1] เหมือนกับ nums[i − 2] ดังนั้น
-
dp[i] :=จริง
-
-
-
ถ้า i>=3 และ dp[i − 3] ไม่ใช่ 0 แล้ว
-
ถ้า (nums[i − 1], nums[i − 2], nums[i − 3]) เหมือนกันหรือ (nums[i − 1], nums[i − 2] + 1, nums[i − 3] + 2 เหมือนกัน) แล้ว
-
dp[i] :=จริง
-
-
-
-
กลับ dp[n]
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution: def solve(self, nums): n = len(nums) dp = [True] + [False] * n for i in range(2, n + 1): if i >= 2 and dp[i − 2]: if nums[i − 1] == nums[i − 2]: dp[i] = True if i >= 3 and dp[i − 3]: if (nums[i − 1] == nums[i − 2] == nums[i − 3]) or (nums[i − 1] == nums[i − 2] + 1 == nums[i − 3] + 2): dp[i] = True return dp[n] ob = Solution() nums = [8, 8, 4, 5, 6] print(ob.solve(nums))
อินพุต
[8, 8, 4, 5, 6]
ผลลัพธ์
True