915. Partition Array into Disjoint Intervals
Description
Given an 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 inright
.left
andright
are non-empty.left
has the smallest possible size.
Return the length of left
after such a partitioning. It is guaranteed that such a partitioning exists.
Constraints
2 <= nums.length <= 30000
0 <= nums[i] <= 106
It is guaranteed there is at least one way to partition
nums
as described.
Approach
Links
Binarysearch
GeeksforGeeks
ProgramCreek
YouTube
Examples
Input: nums = [5, 0, 3, 8, 6]
Output: 3
Explanation: left = [5, 0, 3], right = [8, 6]
Solutions
/**
* Time complexity :
* Space complexity :
*/
class Solution {
public int partitionDisjoint(int[] nums) {
int n = nums.length;
int[] minNums = new int[n];
int min = Integer.MAX_VALUE;
for(int i = n-1; i >= 0; i--) {
min = Math.min(min, nums[i]);
minNums[i] = min;
}
int[] maxNums = new int[n];
int max = Integer.MIN_VALUE;
for(int i = 0; i < n; i++) {
max = Math.max(max, nums[i]);
maxNums[i] = max;
if(i < n-1 && maxNums[i] <= minNums[i+1]) {
return i+1;
}
}
return n;
}
}
Follow up
Last updated
Was this helpful?