1. Question:
915. Partition Array into Disjoint Intervals
https://leetcode.com/problems/partition-array-into-disjoint-intervals/
Given an array A
, 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.
Example 1:
Input: [5,0,3,8,6]
Output: 3
Explanation: left = [5,0,3], right = [8,6]
Example 2:
Input: [1,1,1,0,6,12]
Output: 4
Explanation: left = [1,1,1,0], right = [6,12]
Note:
2 <= A.length <= 30000
0 <= A[i] <= 10^6
- It is guaranteed there is at least one way to partition
A
as described.
2. Solution:
class Solution: def partitionDisjoint(self, A): """ :type A: List[int] :rtype: int """ size = len(A) right_min = [A[-1] for v in range(size)] min_value = A[-1] for i in range(size - 1, -1, -1): min_value = min(min_value, A[i]) right_min[i] = min_value left_max = A[0] for i in range(size - 1): left_max = max(left_max, A[i]) if left_max <= right_min[i + 1]: return i + 1
3. Complexity Analysis
Time Complexity : O(N)
Space Complexity: O(N)