39. 恢复旋转排序数组


39. 恢复旋转排序数组
给定一个旋转排序数组,在原地恢复其排序。

样例
[4, 5, 1, 2, 3] -> [1, 2, 3, 4, 5]

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

说明
什么是旋转数组?

比如,原始数组为[1,2,3,4], 则其旋转数组可以是[1,2,3,4], [2,3,4,1], [3,4,1,2], [4,1,2,3]

方法1: 

三步翻转法:



"""
三步反转法

找到两个rotated的数组的间隔点,条件:nums[i] > nums[i+1]

反转[0,i+1]的数组
反转[i+1,size]的数组
反转[0,size]的数组

数组就变成的有序的数组
"""
class Solution:
    """
    @param nums: An integer array
    @return: nothing
    """
    def recoverRotatedSortedArray(self, nums):

        # write your code here
        l = len(nums)
        if l == 0:
            return -1
        for i in range(l - 1):

            if nums[i] > nums[i + 1]:
                self.reverse(nums, 0, i)
                self.reverse(nums, i + 1, l - 1)
                self.reverse(nums, 0, l - 1)
        return nums

    #反转任何数组,无论大小等顺序关系,反转区间是start -- end
    def reverse(self, nums, start, end):
        while start < end:
            nums[start], nums[end] = nums[end], nums[start]
            start += 1
            end -= 1

my_solution = Solution()
#nums = [5, 6, 1, 2, 3,4]
nums = [3,4,1,2]
reversed_nums = my_solution.recoverRotatedSortedArray(nums)
print(reversed_nums)    


方法2:

霸气Python,让你服

sort是直接在原数组上排序,sorted是返回排序后的结果

对于一个无序的列表a,调用a.sort(),对a进行排序后返回a,sort()函数修改待排序的列表内容。

而对于同样一个无序的列表a,调用sorted(a),对a进行排序后返回一个新的列表,而对a不产生影响。

class Solution:
    """
    @param nums: An integer array
    @return: nothing
    """
    def recoverRotatedSortedArray(self, nums):
        # write your code here
        return nums.sort()

 

sort函数和sorted()函数区别

'''
sort()是一个函数,这个函数没有返回值,所以调用这个函数后打印是none,而a这个数组还在,是被拍好序的

sort()没有返回值,是直接在原数组上操作,也就是说,原数组(nums, nums_2)被排序了
题目中的要求是,要直接在原数组中排序,而不是返回排序后的结果

sort是直接在原数组上排序,sorted是返回排序后的结果

对于一个无序的列表a,调用a.sort(),对a进行排序后返回a,sort()函数修改待排序的列表内容。

而对于同样一个无序的列表a,调用sorted(a),对a进行排序后返回一个新的列表,而对a不产生影响。
'''

nums = [5, 6, 1, 2, 3,4]
original_nums = nums.sort()
print(original_nums)
print(nums)  				#sort()是一个函数,这个函数没有返回值,所以调用这个函数后打印是none,而a这个数组还在,是被拍好序的

nums_2 = [4,5,1,2,3]
print(nums_2.sort())

b = sorted(nums)

print(b)

输出
None
[1, 2, 3, 4, 5, 6]
None
[1, 2, 3, 4, 5, 6]
[Finished in 0.0s]

1

微信扫一扫
关注该公众号

猜你喜欢

转载自blog.csdn.net/BTUJACK/article/details/82944324