0915. Partition Array Into Disjoint Intervals

0915. Partition Array into Disjoint Intervals #

题目 #

  • 给定一个数组 nums ,将其划分为两个连续子数组 leftright, 使得:
    • left 中的每个元素都小于或等于 right 中的每个元素。
    • leftright 都是非空的。
    • left 的长度要尽可能小。
  • 在完成这样的分组后返回 left长度
  • 用例可以保证存在这样的划分方法。

思路 #

模拟 #

代码 #

模拟 #

class Solution {
    public int partitionDisjoint(int[] nums) {
        int[] leftMaximum = new int[nums.length], rightMinimum = new int[nums.length];
        leftMaximum[0] = nums[0]; for (int i = 1; i < nums.length; i++) leftMaximum[i] = Math.max(leftMaximum[i-1], nums[i]);
        rightMinimum[nums.length-1] = nums[nums.length-1]; for (int i = nums.length-2; i>=0; i--) rightMinimum[i] = Math.min(rightMinimum[i+1], nums[i]);
        for (int i = 0; i+1<nums.length; i++) if (leftMaximum[i]<=rightMinimum[i+1]) return i+1;
        return -1;
    }
}

致谢 #

宫水三叶