915. 分割数组

给定一个数组 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]

 

提示:

  1. 2 <= A.length <= 30000
  2. 0 <= A[i] <= 10^6
  3. 可以保证至少有一种方法能够按题目所描述的那样对 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));

	}

}

 

上一篇:养猪日记 2021.10.24


下一篇:ASP.NET MVC 让@Html.DropDownList显示默认值