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