Leetcode 915 分割陣列

2021-10-03 05:39:36 字數 1823 閱讀 6935

給定乙個陣列 a,將其劃分為兩個不相交(沒有公共元素)的連續子陣列 left 和 right, 使得:

left 中的每個元素都小於或等於 right 中的每個元素。

left 和 right 都是非空的。

left 要盡可能小。

在完成這樣的分組後返回 left 的長度。可以保證存在這樣的劃分方法。

示例 1:

輸入:[5,0,3,8,6]

輸出:3

解釋:left = [5,0,3],right = [8,6]

示例 2:

輸入:[1,1,1,0,6,12]

輸出:4

解釋:left = [1,1,1,0],right = [6,12]

2 <= a.length <= 30000

0 <= a[i] <= 10^6

可以保證至少有一種方法能夠按題目所描述的那樣對 a 進行劃分。

維護兩個陣列,從左到右,目前遇到的最大元素lmax;從右到左,目前遇到的最小的元素rmin。

從1到len(a)-1,遍歷i。以i為分割界限,小於i的為左邊陣列,大於等於i的為右邊陣列。只要滿足lmax[i-1] <= rmin[i]即可

class

solution

:def

partitiondisjoint

(self, a: list[

int])-

>

int:

lmax =[0

for i in

range

(len

(a))

] lmax[0]

= a[0]

for i in

range(1

,len

(a))

: lmax[i]

=max

(lmax[i-1]

, a[i]

) rmin =[0

for i in

range

(len

(a))

] rmin[-1

]= a[-1

]for i in

range

(len

(a)-2,

-1,-

1): rmin[i]

=min

(rmin[i+1]

, a[i]

)for i in

range(1

,len

(a)):if

(lmax[i-1]

<= rmin[i]):

return i

class

solution

:def

partitiondisjoint

(self, a: list[

int])-

>

int:

rmin =

min(a)

lmax = a[0]

for i in

range(1

,len

(a)):if

(lmax <= rmin)

:return i

else:if

(a[i]

> lmax)

: lmax = a[i]

if(a[i]

<= rmin)

: rmin =

min(a[i+1:

])

leetcode 915 分割陣列

給定乙個陣列a,將其劃分為兩個不相交 沒有公共元素 的連續子陣列left和right,使得 在完成這樣的分組後返回left的長度。可以保證存在這樣的劃分方法。示例 1 輸入 5,0,3,8,6 輸出 3解釋 left 5,0,3 right 8,6 示例 2 輸入 1,1,1,0,6,12 輸出 4...

Leetcode 915 分割陣列

給定乙個陣列a,將其劃分為兩個不相交 沒有公共元素 的連續子陣列left和right,使得 在完成這樣的分組後返回left的長度。可以保證存在這樣的劃分方法。示例 1 輸入 5,0,3,8,6 輸出 3解釋 left 5,0,3 right 8,6 示例 2 輸入 1,1,1,0,6,12 輸出 4...

leetcode915 分割陣列

給定乙個陣列 a,將其劃分為兩個不相交 沒有公共元素 的連續子陣列 left 和 right,使得 在完成這樣的分組後返回 left 的長度。可以保證存在這樣的劃分方法。不檢驗 all l r for l in left for r in right 而是檢驗 max left min right ...