C ++中的美丽数组

假设对于某个固定值N,当数组A是整数1、2,...,N的置换时,它是美丽的,使得-

  • 对于每个i <j,不存在这样的k,而i <k <j使得A [k] * 2 = A [i] + A [j]。

假设我们有N个,我们必须找到任何美丽的数组A。

因此,如果输入类似于5,则输出将为[3,1,2,5,4]

为了解决这个问题,我们将遵循以下步骤-

  • 创建一个名为ret的数组,将1插入ret

  • 而ret的大小<N

    • 如果ret [i] * 2 – 1 <= N,则将ret [i] * 2 – 1插入临时数组

    • 创建一个数组临时

    • 当我的范围是0到视网膜大小– 1

    • 当我的范围是0到视网膜大小– 1

    • 如果ret [i] * 2 <= N,则将ret [i] * 2插入临时数组

    • 设置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]