LeetCode 969 煎餅排序

2021-10-09 20:10:26 字數 953 閱讀 4122

原題鏈結

不斷翻轉陣列的前面的幾個元素達到排序的效果。

思路:每次找到沒有被交換到陣列首位的最小值元素,並將包括該元素之前的所有元素翻轉;

在陣列中尋找到下乙個最小值元素,並將不包括該最小值元素之前的所有元素翻轉,那麼最小值和次最小值放在了一起;

重複步驟1 ;

途中利用下表index記錄翻轉的長度;

該思路中有一些稍微的冗餘,比如,當第一步完成後,次小值與最小值已經在一塊了,就沒有必要進行下一步翻轉,應當跳過一次。如果想在結果陣列中優化,就去掉陣列中挨在一塊的相同的元素的乙個;否則需要新增判斷條件;

利用了stl的reverse(arr.begin(), arr.end())函式,該函式將輸入的陣列倒置;時間複雜度:o(n^2);

class

solution

} visiteds[index]=1

;//將當前最小值元素標記為已訪問

if(index >1)

resultarr.

push_back

(index+1)

;reverse

(arr.

begin()

, arr.

begin()

+index+1)

;reverse

(visiteds.

begin()

,visiteds.

begin()

+index+1)

;//訪問陣列也要跟著動

} resultarr.

push_back

(mylen)

;reverse

(arr.

begin()

,arr.

end())

; cout

;

leetcode 969 煎餅排序

題目 給定陣列 a,我們可以對其進行煎餅翻 我們選擇一些正整數 k a.length,然後反轉 a 的前 k 個元素的順序。我們要執行零次或多次煎餅翻轉 按順序一次接一次地進行 以完成對陣列 a 的排序。返回能使 a 排序的煎餅翻轉操作所對應的 k 值序列。任何將陣列排序且翻轉次數在 10 a.le...

LeetCode 969 煎餅排序

給定陣列 a,我們可以對其進行煎餅翻 我們選擇一些正整數 k a.length,然後反轉 a 的前 k 個元素的順序。我們要執行零次或多次煎餅翻轉 按順序一次接一次地進行 以完成對陣列 a 的排序。返回能使 a 排序的煎餅翻轉操作所對應的 k 值序列。任何將陣列排序且翻轉次數在 10 a.lengt...

LeetCode 969 煎餅排序

給定陣列 a,我們可以對其進行煎餅翻 我們選擇一些正整數 k a.length,然後反轉 a 的前 k 個元素的順序。我們要執行零次或多次煎餅翻轉 按順序一次接一次地進行 以完成對陣列 a 的排序。返回能使 a 排序的煎餅翻轉操作所對應的 k 值序列。任何將陣列排序且翻轉次數在 10 a.lengt...