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.