給定乙個無序的陣列 nums,將它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]… 的順序。
示例 1:
輸入: nums = [1, 5, 1, 1, 6, 4]
輸出: 乙個可能的答案是 [1, 4, 1, 5, 1, 6]
示例 2:
輸入: nums = [1, 3, 2, 2, 3, 1]
輸出: 乙個可能的答案是 [2, 3, 1, 3, 1, 2]
說明:
你可以假設所有輸入都會得到有效的結果。
高階:
你能用 o(n) 時間複雜度和 / 或原地 o(1) 額外空間來實現嗎?
思路:
看清題目,就是3個數為一組a,b,c。在排序後,中間的比兩邊的數要大,即a
<
b>cac
a<
b>c。
複製原陣列,並且對其進行排序。
排序函式sort函式得包含標頭檔案 #include,具體如下
//引數:sort
(iterator begin, iterator end, method)
;
\quad
begin:起始位置迭代器。
\quad
end:結束位置迭代器。
\quad
method:排序方法,可以省略,預設為less()
,從小到大排序。還可以選擇greater()
,後面的括號不能省略,表示從大到小排序,大的在前頭,還可以為自定義的比較函式。
注意與priority_queue,method>
的區別,此處method可以為less
,greater
,或自定義比較函式。
兩者在效果上中,less()= greater
,表示小的在前面。greater() = less
表示大的在前面。
測試如下:
測試結果:int
main()
);//測試大/小頂堆,可以看出此處的less等價於後面的greater(),表示大的數在頂部
priority_queue<
int,vector<
int>
,less<
int>> big_q;
priority_queue<
int,vector<
int>
,greater<
int>> small_q;
for(
auto
&e:nums)
//測試sort
vector<
int> tmp=nums;
sort
(tmp.
begin()
,tmp.
end(
),greater<
int>()
);//greater()表示大的在前面.
return0;
}
將排序後一半數(較大的數),插入到索引為奇數的位置。排序前一半數字(較小的數),即從中間往前的數,插入到索引為奇數的位置。
對於中間位置需要計算好。若陣列長度n為偶數,則mid=n/2-1。若n為奇數,則mid=n/2。因為中間位置的數是不需要改變位置的,在插入完成後,處於最後位置。
**:
結果:[1] weixin_43750513:leetcode 324. 擺動排序 ii c++//sort函式得包含標頭檔案 #include
class
solution}}
;
擺動排序 II
擺動排序 ii 給定乙個無序的陣列nums,將它重新排列成nums 0 nums 1 nums 2 nums 3 的順序。示例 1 輸入 nums 1,5,1,1,6,4 輸出 乙個可能的答案是 1,4,1,5,1,6 示例 2 輸入 nums 1,3,2,2,3,1 輸出 乙個可能的答案是 2,3...
擺動排序 II
給定乙個無序的陣列 nums,將它重新排列成 nums 0 nums 1 nums 2 nums 3 的順序。示例 1 輸入 nums 1,5,1,1,6,4 輸出 乙個可能的答案是 1,4,1,5,1,6 示例 2 輸入 nums 1,3,2,2,3,1 輸出 乙個可能的答案是 2,3,1,3,1...
LeetCode 324 擺動排序 II
給定乙個無序的陣列nums,將它重新排列成nums 0 nums 1 nums 2 nums 3 的順序。示例 1 輸入 nums 1,5,1,1,6,4 輸出 乙個可能的答案是 1,4,1,5,1,6 示例 2 輸入 nums 1,3,2,2,3,1 輸出 乙個可能的答案是 2,3,1,3,1,2...