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

โปรแกรมตรวจสอบว่าเราแยกรายการเป็นรายการย่อยที่เพิ่มขึ้นต่อเนื่องกันได้หรือไม่ในPython


สมมติว่าเรามีรายการตัวเลขที่เรียกว่า 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 เข้าไปที่จุดเริ่มต้น
  • คืนค่าจริงเมื่อคู่ทั้งหมด (เริ่มต้น, สิ้นสุด) ตอบสนอง (เริ่มต้น + 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