C ++中的美丽安排II
假设我们有两个整数n和k,我们需要构造一个包含n个不同的正整数的列表,范围从1到n,并遵循以下规则-
考虑列表为[a1,a2,a3,...,an],然后列表[|a1-a2|,|a2-a3|,|a3-a4|,...,|an-1-an|]恰好有k个唯一整数。因此,如果有多个答案,请显示其中任何一个。
如果输入像n=3且k=2,则结果将为[1,3,2]。[1,3,2]具有三个不同的正整数,范围从1到3。[2,1]具有正好2个不同的整数1和2。
为了解决这个问题,我们将遵循以下步骤-
定义数组ret
对于i:=1,j:=n,检查i<=j
如果k为奇数,则插入i,否则将j插入ret
如果k为奇数,则将i加1,否则将j减1
将k减1
如果k>1,则
否则将我插入res并将i增加1
返回ret
让我们看下面的实现以更好地理解-
示例
#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<int> v){
cout << "[";
for(int i = 0; i<v.size(); i++){
cout << v[i] << ", ";
}
cout << "]"<<endl;
}
class Solution {
public:
vector<int> constructArray(int n, int k) {
vector <int> ret;
for(int i = 1, j = n; i <= j; ){
if(k > 1){
ret.push_back(k % 2 ? i : j);
if(k % 2 == 1){
i++;
}else j--;
k--;
} else {
ret.push_back(i++);
}
}
return ret;
}
};
main(){
Solution ob;
print_vector(ob.constructArray(3, 2));
}输入项
3 2
输出结果
[3, 1, 2, ]
热门推荐
10 八一幼儿祝福语大全简短
11 公司乔迁食堂祝福语简短
12 婚礼结束聚餐祝福语简短
13 儿媳买车妈妈祝福语简短
14 毕业送礼老师祝福语简短
15 同事辞职正常祝福语简短
16 恭贺新婚文案祝福语简短
17 金店立秋祝福语简短英文
18 婆婆高寿祝福语大全简短