समस्या विवरण
मान लीजिए हमारे पास nums नामक एक असॉर्ट की गई सरणी है, हमें इसे स्थानांतरित (in-place) करना है ताकि nums[0] <= nums[1] >= nums[2] <= nums[3]... और इसी तरह हो।
उदाहरण के लिए, यदि इनपुट nums = [3,5,2,1,6,4] है, तो आउटपुट [3,5,1,6,2,4] होगा, अन्य उत्तर भी संभव हैं।
समाधान दृष्टिकोण
लालची दृष्टिकोण - एक पास में स्वैप करें:
- n := nums का आकार
- i को 0 से n-2 तक लूप करें:
- यदि (i सम है और nums[i] > nums[i+1]) OR (i विषम है और nums[i] < nums[i+1]):
- swap(nums[i], nums[i+1])
- यदि (i सम है और nums[i] > nums[i+1]) OR (i विषम है और nums[i] < nums[i+1]):
C++ कार्यान्वयन
#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:
void wiggleSort(vector<int>& nums) {
int n = nums.size();
for(int i = 0; i < n - 1; i+=1){
if((i % 2 == 0) == ( nums[i] > nums[i + 1])){
swap(nums[i], nums[i + 1]);
}
}
}
};
int main(){
vector<int> v = {3,5,2,1,6,4};
Solution ob;
ob.wiggleSort(v);
print_vector(v);
return 0;
}
इनपुट
{3,5,2,1,6,4}
आउटपुट
[3, 5, 1, 6, 2, 4, ]