陣列 恢復旋轉排序陣列 簡單

2021-08-20 09:16:21 字數 725 閱讀 7911

描述

給定乙個旋轉排序陣列,在原地恢復其排序。

說明什麼是旋轉陣列?

比如,原始陣列為[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)時間複雜度

題目鏈結

分析

對於該題目,要求o(1)的額外空間和o(n)時間複雜度,所以不能夠新建陣列或者多次迴圈呼叫。首先,判斷該陣列是否已經排好序;如果沒有排好序,會在遞增的途中突然減小,找到那個位置。將該位置之前的翻轉,再將該位置之後的翻轉,最後將整個陣列翻轉,示例如下:

[4, 5, 1, 2, 3]突然減小的位置是2,所以將[4, 5]進行翻轉,得到[5, 4, 1, 2, 3];

將位置2及其之後的翻轉,得到[5, 4, 3, 2, 1];

對整個陣列進行翻轉,得到[1, 2, 3, 4, 5]。

這裡,翻轉的子函式為交換兩端位置,然後不斷地向中間逼近,直到兩端的位置相等。

程式

class solution 

void reverse_nums(vector&nums, int begin, int end)

}};

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...

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 方法...

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 時間複雜度 迴圈將頭部放到後面,知道遇到比下乙個值比當...