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

เปิดเผยการ์ดในการสั่งซื้อที่เพิ่มขึ้นใน C++


สมมติว่าเรามีสำรับไพ่ การ์ดทุกใบมีหมายเลขที่ไม่ซ้ำกันหนึ่งหมายเลข เราสามารถสั่งสำรับไพ่ในลำดับใดก็ได้ที่เราต้องการ ดังนั้น ในตอนแรก ไพ่ทั้งหมดเริ่มคว่ำหน้า (ไม่เปิดเผย) ในสำรับเดียว ตอนนี้ เราทำขั้นตอนต่อไปนี้หลายครั้ง จนกว่าไพ่ทั้งหมดจะถูกเปิดเผย –

  • สมมติว่าเรามีสำรับไพ่ การ์ดทุกใบมีหมายเลขที่ไม่ซ้ำกันหนึ่งหมายเลข เราสามารถสั่งสำรับไพ่ในลำดับใดก็ได้ที่เราต้องการ ดังนั้น ในตอนแรก ไพ่ทั้งหมดเริ่มคว่ำหน้า (ไม่เปิดเผย) ในสำรับเดียว ตอนนี้ เราทำขั้นตอนต่อไปนี้หลายครั้ง จนกว่าไพ่ทั้งหมดจะถูกเปิดเผย –

  • หากยังมีไพ่อยู่ในสำรับ ให้นำไพ่ใบบนสุดของไพ่ใบถัดไปไปไว้ที่ด้านล่างของสำรับ

  • หากยังมีการ์ดที่มองไม่เห็น ให้กลับไปที่ขั้นตอนที่ 1 มิฉะนั้น ให้หยุดกระบวนการ

เราจึงต้องคืนลำดับของสำรับที่จะเปิดเผยไพ่ตามลำดับที่เพิ่มขึ้น

ตอนนี้รายการแรกในคำตอบถือเป็นอันดับต้น ๆ ของสำรับ

ดังนั้นหากอินพุตเป็น [17,13,11,2,3,5,7] ผลลัพธ์จะเป็น [2,13,3,11,5,17,7] สมมติว่าเราจัดลำดับใหม่เป็น [2,13,3,11,5,17,7] ตอนนี้ 2 อยู่ด้านบน หลังจากเห็น 2 แล้ว เลื่อน 13 ไปที่สุดท้าย ดังนั้นเด็คจะเป็น [3,11,5,17,7,13 ] จากนั้นลบ 3 แล้วทำตามขั้นตอนอีกครั้ง ดังนั้นสำรับจะเป็น [5,17,7,13,11] หลังจากนั้นลบ 5 จากนั้นหลังจากย้ายจากบนลงล่าง อาร์เรย์จะเป็น [7,13,11,17] จากนั้นทำเช่นเดียวกันเด็ค โครงสร้างจะเป็น [11,17,13], [13.17], [17] แล้วลบ 17.

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

  • ขั้นแรกให้เรียงลำดับสำรับ ตั้งค่า n :=ขนาดของสำรับ

  • กำหนดคิว q และอาร์เรย์ที่เรียกว่าขนาด n

  • แทรกองค์ประกอบ i ที่ต่อเนื่องกันลงใน q โดยที่ i มีตั้งแต่ 0 ถึง n – 1

  • สำหรับฉันอยู่ในช่วง 0 ถึง n – 1

    • x :=องค์ประกอบด้านหน้าของ q จากนั้นลบออกจากคิว

    • ans[x] :=สำรับ[i]

    • x :=องค์ประกอบด้านหน้าของ q และลบออกจากคิว

    • แทรก x ลงใน q

  • กลับมาอีกครั้ง

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

ตัวอย่าง

#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> deckRevealedIncreasing(vector& deck) {
      sort(deck.begin(), deck.end());
      int n = deck.size();
      queue <int> q;
      vector <int> ans(n);
      for(int i = 0; i < n; i++)q.push(i);
      int x;
      for(int i = 0; i < n; i++){
         x = q.front();
         q.pop();
         ans[x] = deck[i];
         x = q.front();
         q.pop();
         q.push(x);
      }
      return ans;
   }
};
main(){
   vector<int> v1 = {17,13,11,2,3,5,7};
   Solution ob;
   print_vector(ob.deckRevealedIncreasing(v1));
}

อินพุต

[17,13,11,2,3,5,7]

ผลลัพธ์

[2,13,3,11,5,17,7]