C++ 中的美麗陣列


假設對於 N 的某個固定值,陣列 A 在其為整數 1、2、…、N 的置換時為一個美麗的陣列,- 的條件下成立

  • 對於任意 i < j,不存在 i < k < j,使得 A[k] * 2 = A[i] + A[j]。

假設我們有 N,我們需要找到任意美麗的陣列 A。

因此如果輸入類似 5,則輸出將為 [3,1,2,5,4]

為了解決此問題,我們將遵循以下步驟:

  • 建立一個名為 ret 的陣列,將 1 填入 ret 中

  • while ret 大小 < N

    • 建立一個數組 temp

    • for i 在 0 到 ret 大小 – 1 的範圍內

      • 如果 ret[i] * 2 – 1 <= N,則將 ret[i] * 2 – 1 填入 temp 陣列

    • for i 在 0 到 ret 大小 – 1 的範圍內

    • 如果 ret[i] * 2 <= N,則將 ret[i] * 2 填入 temp 陣列

    • 設定 ret := temp

  • 返回 ret

我們檢視以下實現以便更好地理解 -

示例

 即時演示

#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:
   vector<int> beautifulArray(int N) {
      vector <int> ret;
      ret.push_back(1);
      while(ret.size() < N){
         vector <int> temp;
         for(int i = 0; i < ret.size(); i++){
            if(ret[i] * 2 - 1 <= N) temp.push_back(ret[i] * 2 - 1);
         }
         for(int i = 0; i < ret.size(); i++){
            if(ret[i] * 2 <= N)temp.push_back(ret[i] * 2 );
         }
         ret = temp;
      }
      return ret;
   }
};
main(){
   Solution ob;
   print_vector(ob.beautifulArray(6));
}

輸入

5

輸出

[1,5,3,2,4]

更新於: 30-4 月-2020

772 閱讀次數

開啟你的 職業生涯

完成課程並獲得認證

開始
廣告
© . All rights reserved.