forked from alqamahjsr/Algorithms
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSubarray_Sort.py
More file actions
29 lines (24 loc) · 849 Bytes
/
Subarray_Sort.py
File metadata and controls
29 lines (24 loc) · 849 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# O(n) time | O(1) space
def subarraySort(array):
minOutOfOrder = float('inf')
maxOutOfOrder = float('-inf')
for i in range(len(array)):
num = array[i]
if isOutOfOrder(i, num, array):
minOutOfOrder = min(num, minOutOfOrder)
maxOutOfOrder = max(num, maxOutOfOrder)
if minOutOfOrder == float('inf'):
return [-1, -1]
subArrayLeftIdx = 0
subArrayRightIdx = len(array) - 1
while minOutOfOrder >= array[subArrayLeftIdx]:
subArrayLeftIdx += 1
while maxOutOfOrder <= array[subArrayRightIdx]:
subArrayRightIdx -= 1
return [subArrayLeftIdx, subArrayRightIdx]
def isOutOfOrder(i, num, array):
if i == 0:
return num > array[i + 1]
if i == len(array) - 1:
return num < array[i - 1]
return num > array[i + 1] or num < array[i - 1]