Python程式:將陣列劃分成不相交的區間
假設我們有一個數組 nums,我們需要將其分成兩個不同的子陣列,分別稱為 left 和 right,使得:
left 子陣列中的每個元素都小於或等於 right 子陣列中的每個元素。
left 和 right 子陣列都非空。
left 子陣列具有儘可能小的尺寸。
我們需要找到這種劃分後 left 的長度。
因此,如果輸入類似於 nums = [5,0,3,8,6],則輸出將為 3,因為 left 陣列將為 [5,0,3],而 right 子陣列將為 [8,6]。
為了解決這個問題,我們將遵循以下步驟:
mx := null,temp := null,nmx := null
temp2 := 0
對於 nums 中的每個 i,執行以下操作:
如果 mx 等於 null,則:
mx := i
nmx := i
temp := temp2
temp2 := temp2 + 1
進入下一個迭代
如果 i>=mx,則:
temp2 := temp2 + 1
如果 i>nmx,則:
nmx := i
進入下一個迭代
否則:
temp := 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
廣告