สมมติว่าเรามีจำนวนอาร์เรย์ เราต้องแบ่งมันออกเป็นสองอาร์เรย์ย่อยที่แตกต่างกันเรียกว่าซ้ายและขวาเพื่อให้ -
-
แต่ละองค์ประกอบในอาร์เรย์ย่อยด้านซ้ายจะน้อยกว่าหรือเท่ากับแต่ละองค์ประกอบในอาร์เรย์ย่อยด้านขวา
-
อาร์เรย์ย่อยด้านซ้ายและขวาไม่ว่างเปล่า
-
อาร์เรย์ย่อยด้านซ้ายมีขนาดเล็กที่สุด
เราต้องหาความยาวของด้านซ้ายหลังจากการแบ่งพาร์ทิชันดังกล่าว
ดังนั้น หากอินพุตเป็น 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