สมมติว่าเรามีรายการตัวเลขที่เรียกว่า nums และเรียงลำดับแบบไม่ลดจำนวน เราต้องตรวจสอบว่าสามารถแบ่งออกเป็นลำดับย่อยจำนวนเท่าใดก็ได้ โดยแต่ละลำดับย่อยมีความยาวอย่างน้อย 3 และเพิ่มขึ้นต่อเนื่องกัน
ดังนั้นหากอินพุตเป็นเหมือน nums =[2, 3, 4, 4, 5, 6, 7] ผลลัพธ์จะเป็น True เนื่องจากเราสามารถแบ่งรายการเป็น [2, 3, 4] และ [4, 5, 6, 7].
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- จำนวน :=แผนที่ที่มีองค์ประกอบของ nums และการนับ
- เริ่ม :=รายการใหม่
- สิ้นสุด :=รายการใหม่
- สำหรับแต่ละ x ในรายการของการนับในลำดับที่เรียงลำดับ ทำ
- ถ้า count[x]> นับ[x - 1] แล้ว
- l :=รายการขนาด (นับ[x] - นับ[x - 1]) และเติมด้วย x
- ใส่ l เข้าไปที่จุดเริ่มต้น
- ถ้า count[x]> นับ[x + 1] แล้ว
- l :=รายการขนาด (นับ[x] - นับ[x + 1]) และเติมด้วย x
- ใส่ l เข้าไปที่จุดเริ่มต้น
- ถ้า count[x]> นับ[x - 1] แล้ว
- คืนค่าจริงเมื่อคู่ทั้งหมด (เริ่มต้น, สิ้นสุด) ตอบสนอง (เริ่มต้น + 2 <=สิ้นสุด) มิฉะนั้นจะคืนค่าเท็จ
ตัวอย่าง (Python)
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
from collections import Counter class Solution: def solve(self, nums): count = Counter(nums) starts = [] ends = [] for x in sorted(count): if count[x] > count[x - 1]: starts.extend([x] * (count[x] - count[x - 1])) if count[x] > count[x + 1]: ends.extend([x] * (count[x] - count[x + 1])) return all(s + 2 <= e for s, e in zip(starts, ends)) ob = Solution() nums = [2, 3, 4, 4, 5, 6, 7] print(ob.solve(nums))
อินพุต
[6, 7, 5, 10, 13], 2
ผลลัพธ์
True