All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g0901_1000.s0915_partition_array_into_disjoint_intervals.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g0901_1000.s0915_partition_array_into_disjoint_intervals;

// #Medium #Array #2022_03_29_Time_2_ms_(99.81%)_Space_96.1_MB_(47.60%)

/**
 * 915 - Partition Array into Disjoint Intervals\.
 *
 * Medium
 *
 * Given an integer array `nums`, partition it into two (contiguous) subarrays `left` and `right` so that:
 *
 * *   Every element in `left` is less than or equal to every element in `right`.
 * *   `left` and `right` are non-empty.
 * *   `left` has the smallest possible size.
 *
 * Return _the length of_ `left` _after such a partitioning_.
 *
 * Test cases are generated such that partitioning exists.
 *
 * **Example 1:**
 *
 * **Input:** nums = [5,0,3,8,6]
 *
 * **Output:** 3
 *
 * **Explanation:** left = [5,0,3], right = [8,6] 
 *
 * **Example 2:**
 *
 * **Input:** nums = [1,1,1,0,6,12]
 *
 * **Output:** 4
 *
 * **Explanation:** left = [1,1,1,0], right = [6,12] 
 *
 * **Constraints:**
 *
 * *   2 <= nums.length <= 105
 * *   0 <= nums[i] <= 106
 * *   There is at least one valid answer for the given input.
**/
public class Solution {
    public int partitionDisjoint(int[] nums) {
        int res = 0;
        int leftMax = nums[0];
        int greater = nums[0];
        for (int i = 1; i < nums.length; i++) {
            if (greater <= nums[i]) {
                greater = nums[i];
            } else if (nums[i] < leftMax) {
                res = i;
                leftMax = greater;
            }
        }
        return res + 1;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy