LeetCode C 擺動排序 II

2021-10-08 01:38:26 字數 2051 閱讀 5005

給定乙個無序的陣列 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可以為lessgreater,或自定義比較函式。

兩者在效果上中,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。因為中間位置的數是不需要改變位置的,在插入完成後,處於最後位置。

**:

//sort函式得包含標頭檔案 #include

class

solution}}

;

結果:[1] weixin_43750513:leetcode 324. 擺動排序 ii c++

擺動排序 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...