Time complexity = O(n) , space complexity = O(1)# recover rotated sorted array
def recoverArray(nums):
# consider edge case
left = 0
right = len(nums) - 1
# find pivot
while left + 1 < right:
mid = left + (right - left)//2
if nums[mid] < nums[left]:
right = mid
else:
left = mid
print("pivot is: ", right)
# right is the pivot
# rotate two parts
for i in range(0, right//2):
x = nums[i]
nums[i] = nums[right-1-i]
nums[right-1-i] = x
for i in range(right, (len(nums)+right)//2):
x = nums[i]
nums[i] = nums[-1-i+right]
nums[-1-i+right] = x
# rotate whole array
for i in range(0, len(nums)//2):
x = nums[i]
nums[i] = nums[-1-i]
nums[-1-i] = x