恢复旋转排序数组

题目描述

给定一个旋转排序数组,在原地恢复其排序。
比如,原始数组为[1,2,3,4], 则其旋转数组可以是[1,2,3,4], [2,3,4,1], [3,4,1,2], [4,1,2,3]

样例

Example1:
[4, 5, 1, 2, 3] -> [1, 2, 3, 4, 5]
Example2:
[6,8,9,1,2] -> [1,2,6,8,9]

挑战

使用O(1)的额外空间和O(n)时间复杂度。

思路

找到旋转位置index,然后3次翻转:先翻转index前面部分,再翻转index后面部分,最后翻转整个数组。
例如:[4, 5, 1, 2, 3],找到index=2,翻转[4,5]为[5,4],翻转[1,2,3]为[3,2,1],最后翻转[5,4,3,2,1]为[1,2,3,4,5]

代码

def recoverRotatedSortedArray(nums):
    # write your code here
    n = len(nums)
    #找min_index
    min_index = 0
    for i in range(n-1):
        if nums[i] > nums[i+1]:
            min_index = i+1
            break
    #翻转nums[0:min_index]
    for j in range(min_index//2):
        nums[j],nums[min_index-1-j] = nums[min_index-1-j],nums[j]
    #翻转nums[min_index:]
    for k in range((n-min_index)//2):
        nums[min_index+k],nums[n-1-k] = nums[n-1-k],nums[min_index+k]
    #翻转nums[:]
    for m in range(n//2):
        nums[m],nums[n-1-m] = nums[n-1-m],nums[m]




全部评论

相关推荐

11-13 12:02
门头沟学院 Java
我要娶个什么名:好骂,好骂 别学计算机就行了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务