原題鏈結
不斷翻轉陣列的前面的幾個元素達到排序的效果。
思路:每次找到沒有被交換到陣列首位的最小值元素,並將包括該元素之前的所有元素翻轉;
在陣列中尋找到下乙個最小值元素,並將不包括該最小值元素之前的所有元素翻轉,那麼最小值和次最小值放在了一起;
重複步驟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...