915. Partition Array into Disjoint Intervals
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
leftis less than or equal to every element inright. leftandrightare non-empty.lefthas 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 <= 300000 <= A[i] <= 10^6- It is guaranteed there is at least one way to partition
Aas 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)
浙公网安备 33010602011771号