给定一个数组 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
进行划分。
package Solution915;
import java.util.Arrays;
class Solution {
public int partitionDisjoint(int[] A) {
if (A.length < 2) {
return 0;
}
for (int i = 1; i < A.length; i++) {
int[] left = Arrays.copyOfRange(A, 0, i);
//System.out.println(Arrays.toString(left));
int[] right = Arrays.copyOfRange(A, i, A.length);
//System.out.println(Arrays.toString(right));
if (findMin(right) >= findMax(left)) {
return i;
}
}
return 0;
}
public int findMin(int[] A) {
int min = Integer.MAX_VALUE;
for (int i = 0; i < A.length; i++) {
if (A[i] < min) {
min = A[i];
}
}
return min;
}
public int findMax(int[] A) {
int max = Integer.MIN_VALUE;
for (int i = 0; i < A.length; i++) {
if (A[i] > max) {
max = A[i];
}
}
return max;
}
public static void main(String[] args) {
Solution sol = new Solution();
int[] A = { 1,1 };
System.out.println(sol.partitionDisjoint(A));
}
}