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

โปรแกรมค้นหาพาร์ติชั่นอาร์เรย์ในช่วงเวลาที่ไม่ปะติดปะต่อกันใน Python


สมมติว่าเรามีจำนวนอาร์เรย์ เราต้องแบ่งมันออกเป็นสองอาร์เรย์ย่อยที่แตกต่างกันเรียกว่าซ้ายและขวาเพื่อให้ -

  • แต่ละองค์ประกอบในอาร์เรย์ย่อยด้านซ้ายจะน้อยกว่าหรือเท่ากับแต่ละองค์ประกอบในอาร์เรย์ย่อยด้านขวา

  • อาร์เรย์ย่อยด้านซ้ายและขวาไม่ว่างเปล่า

  • อาร์เรย์ย่อยด้านซ้ายมีขนาดเล็กที่สุด

เราต้องหาความยาวของด้านซ้ายหลังจากการแบ่งพาร์ทิชันดังกล่าว

ดังนั้น หากอินพุตเป็น nums =[5,0,3,8,6] เอาต์พุตจะเป็น 3 เพราะอาร์เรย์ด้านซ้ายจะเป็น [5,0,3] และอาร์เรย์ย่อยด้านขวาจะเป็น [8,6]

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

  • mx :=null, temp :=null, nmx :=null

  • temp2 :=0

  • สำหรับแต่ละ i ใน nums ทำ

    • ถ้า mx เหมือนกับ null แล้ว

      • mx :=ผม

      • nmx :=ผม

      • อุณหภูมิ :=temp2

      • temp2 :=temp2 + 1

      • ไปทำซ้ำต่อไป

    • ถ้า i>=mx แล้ว

      • temp2 :=temp2 + 1

      • ถ้า i>nmx แล้ว

        • nmx :=ผม

      • ไปทำซ้ำต่อไป

    • มิฉะนั้น

      • อุณหภูมิ :=temp2

      • temp2 :=temp2 + 1

      • mx :=nmx

      • ไปทำซ้ำต่อไป

  • กลับ temp+1

ตัวอย่าง

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

def solve(nums):
   mx = None
   temp = None
   nmx = None
   temp2 = 0

   for i in nums:

      if(mx==None):
         mx = i
         nmx = i
         temp = temp2
         temp2+=1
         continue

      if(i>=mx):
         temp2+=1
         if(i>nmx):
            nmx = i
         continue

      else:
         temp = temp2
         temp2+=1
         mx = nmx
         continue

   return temp+1

nums = [5,0,3,8,6]
print(solve(nums))

อินพุต

[5,0,3,8,6]

ผลลัพธ์

3