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]
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP