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