給定乙個陣列 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 ...