C++ 中的擺動排序


假設我們有一個名為 nums 的未排序陣列,我們必須對其進行原地重新排序,使得 nums[0] <= nums[1] >= nums[2] <= nums[3].... 等等。

因此,如果輸入像 nums = [3,5,2,1,6,4],那麼輸出將是 [3,5,1,6,2,4],可能還有其他答案。

為了解決這個問題,我們將按照以下步驟進行操作:

  • n := nums 的大小

  • 初始化 i := 0,當 i < n - 1 時,更新 i := i + 1,執行以下操作:

    • 如果 i 為偶數且 nums[i] > nums[i+1] 為 true,或 i 為奇數且 nums[i] > nums[i+1] 為 false,則

      • 交換 (nums[i], nums[i + 1])

示例 

讓我們看一下以下實現,以獲得更好的理解:

 線上演示

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<auto< v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
class Solution {
public:
   void wiggleSort(vector<int<& nums) {
      int n = nums.size();
      for(int i = 0; i < n - 1; i+=1){
         if((i % 2 == 0) == ( nums[i] > nums[i + 1])){
            swap(nums[i], nums[i + 1]);
         }
      }
   }
};
main(){
   vector<int< v = {3,5,2,1,6,4};
   Solution ob;
   ob.wiggleSort(v);
   print_vector(v);
}

輸入

{3,5,2,1,6,4}

輸出

[3, 5, 1, 6, 2, 4, ]

更新時間:2020 年 11 月 18 日

955 次瀏覽

開啟你的 職業生涯

完成課程,獲得認證

開始
廣告
© . All rights reserved.