39 恢復旋轉排序陣列

2021-08-28 17:32:23 字數 2235 閱讀 2827

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)

class solution:

"""@param nums: an integer array

@return: nothing

"""def recoverrotatedsortedarray(self, nums):

# write your code here

return nums.sort()

'''

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

39 恢復旋轉排序陣列

給定乙個 旋轉排序陣列,在原地恢復其排序。說明什麼是旋轉陣列?樣例 4,5,1,2,3 1,2,3,4,5 1 我的剛開始的解法 比較複雜 class solution 如果i等於陣列長減一,證明沒有旋轉 if i nums.size 1 int j 實現 4,5,1,2,3 4,5,1,2,3,4...

LintCode 39 恢復旋轉排序陣列

給定乙個旋轉排序陣列,在原地恢復其排序。什麼是旋轉陣列?比如,原始陣列為 1,2,3,4 則其旋轉陣列可以是 1,2,3,4 2,3,4,1 3,4,1,2 4,1,2,3 4,5,1,2,3 1,2,3,4,5 使用o 1 的額外空間和o n 時間複雜度 迴圈將頭部放到後面,知道遇到比下乙個值比當...

LintCode 39(恢復旋轉排序陣列)

lintcode系列,第39題,題目 給定乙個旋轉排序陣列,在原地恢復其排序。說明 什麼是旋轉陣列?樣例 樣例1 4,5,1,2,3 1,2,3,4,5 樣例2 6,8,9,1,2 1,2,6,8,9 找到第乙個大於後繼元素的數,以這個數為界,前半部分做一次逆序,後半部分做一次逆序,最後整個陣列再做...