给定一个数组 A
,将其划分为两个不相交(没有公共元素)的连续子数组 left
和 right
, 使得:
left
中的每个元素都小于或等于right
中的每个元素。left
和right
都是非空的。left
要尽可能小。
在完成这样的分组后返回 left
的长度。可以保证存在这样的划分方法。
输入: [5,0,3,8,6] 输出: 3 解释: left = [5,0,3], right = [8,6]
输入: [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
进行划分。
# @param {Integer[]} a
# @return {Integer}
def partition_disjoint(a)
max_left = a[0]
max = a[0]
length = 1
(1...a.length).each do |i|
if a[i] < max_left
length = i + 1
max_left = max
elsif a[i] > max
max = a[i]
end
end
length
end
impl Solution {
pub fn partition_disjoint(a: Vec<i32>) -> i32 {
let mut max_left = a[0];
let mut max = a[0];
let mut length = 1;
for i in 1..a.len() {
if a[i] < max_left {
length = i + 1;
max_left = max;
} else if a[i] > max {
max = a[i];
}
}
length as i32
}
}