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

โปรแกรมค้นหาชิ้นส่วนสูงสุดเพื่อจัดเรียงอาร์เรย์ใน Python


สมมติว่าเรามีจำนวนอาร์เรย์ เราต้องแยกอาร์เรย์ออกเป็นพาร์ติชั่นจำนวนหนึ่ง และจัดเรียงแต่ละพาร์ติชั่นแยกกัน ตอนนี้หลังจากเชื่อมเข้าด้วยกันแล้วเราจะได้อาร์เรย์ที่จัดเรียงมาหนึ่งชุด เราต้องหาจำนวนพาร์ติชั่นสูงสุดที่เราสามารถทำได้หรือไม่?

ดังนั้นหากอินพุตเป็น [3,2,4,5,5] เอาต์พุตจะเป็น 4 เนื่องจากเราสามารถสร้างพาร์ติชั่นได้เช่น [3,2], [4], [5], [5]

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • จริง:=เรียงลำดับรายการจำนวน

  • p1 :=0,p2 :=1, c :=0

  • ทำสิ่งต่อไปนี้อย่างไม่สิ้นสุด ทำ

    • ธง:=จริง

    • tmp:=เรียงลำดับรายการย่อยของ nums[จากดัชนี p1 ถึง p2-1]

    • สำหรับ j ในช่วง 0 ถึงขนาดของ tmp ให้ทำ

      • ถ้า tmp[j] ไม่เหมือนกับของจริง[p1+j] แล้ว

        • ธง:=เท็จ

        • p2 :=p2 + 1

        • ออกจากวง

      • ถ้าแฟล็กเป็นจริง

        • p1 :=p2

        • p2:=p2+1

        • ค :=ค + 1

      • ถ้า p1 เท่ากับขนาดของ nums หรือ p2> ขนาดของ nums แล้ว

        • กลับค

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น

def solve(nums):
   real=sorted(nums)
   p1,p2,c=0,1,0
   while True:

      flag=True
      tmp=sorted(nums[p1:p2])
      for j in range(len(tmp)):
         if tmp[j]!=real[p1+j]:
            flag=False
            p2+=1
            break

      if flag:
         p1,p2=p2,p2+1
         c+=1
      if p1==len(nums) or p2>len(nums):
         return c

nums = [3,2,4,5,5]
print(solve(nums))

อินพุต

{3,2,4,5,5}

ผลลัพธ์

4