मान लीजिए हमारे पास दो पूर्णांक n और k हैं, हमें एक सूची बनानी है जिसमें 1 से n तक के 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 > 1:- यदि k विषम है, तो i डालें अन्यथा j को
retमें डालें - यदि k विषम है, तो i को 1 से बढ़ाएं, अन्यथा j को 1 से घटाएं
- k को 1 से घटाएं
- यदि k विषम है, तो i डालें अन्यथा j को
- अन्यथा i को
retमें डालें और 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;
}
};
int main(){
Solution ob;
print_vector(ob.constructArray(3, 2));
}
इनपुट
3 2
आउटपुट
[3, 1, 2, ]