Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

อาร์เรย์ที่สวยงามใน C++


สมมติว่าค่าคงที่ของ N อาร์เรย์ A จะสวยงามเมื่อเป็นการเรียงสับเปลี่ยนของจำนวนเต็ม 1, 2, ..., N เช่นนั้น −

  • สำหรับทุก ๆ i

สมมติว่าเรามี N เราต้องหาอาร์เรย์ A ที่สวยงามใดๆ

ดังนั้นหากอินพุตเท่ากับ 5 เอาต์พุตจะเป็น [3,1,2,5,4]

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • สร้างอาร์เรย์หนึ่งชื่อ ret ใส่ 1 ลงใน ret

  • ในขณะที่ขนาดของ ret

    • สร้างอาร์เรย์ชั่วคราว

    • สำหรับผมอยู่ในช่วง 0 ถึงขนาดของ ret – 1

      • ถ้า ret[i] * 2 – 1 <=N ให้ใส่ ret[i] * 2 – 1 ลงในอาร์เรย์ชั่วคราว

    • สำหรับผมอยู่ในช่วง 0 ถึงขนาดของ ret – 1

    • ถ้า ret[i] * 2 <=N ให้ใส่ ret[i] * 2 ลงในอาร์เรย์ชั่วคราว

    • set ret :=temp

  • รีเทิร์น

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

#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]