สมมติว่าเรามีอาร์เรย์จำนวนเต็ม หน้าที่ของเราคือค้นหาลำดับการเพิ่มขึ้นที่เป็นไปได้ที่แตกต่างกันทั้งหมดของอาร์เรย์ที่กำหนด และความยาวของลำดับรองที่เพิ่มขึ้นควรมีอย่างน้อย 2 ดังนั้นหากอาร์เรย์นั้นชอบ [4,6,7,7 ] จากนั้นผลลัพธ์จะเป็นเช่น − [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7 , 7], [7,7], [4,7,7].
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- กำหนดอาร์เรย์ที่เรียกว่า res เพื่อเก็บผลลัพธ์ทั้งหมด
- สร้างวิธีการที่เรียกว่าแก้ปัญหา นี่จะใช้ nums array, start และ temp array
- ถ้าขนาด temp> 1 ให้ใส่ temp ลงใน res
- จัดชุดที่เรียกว่ามาเยี่ยม
- สำหรับ i ในช่วงเริ่มต้นที่ขนาดของ nums
- x :=nums[i]
- ถ้า x อยู่ในเซตที่เข้าชม ให้ข้ามส่วนถัดไปของลูป
- ใส่ x ลงในชุดที่เข้าชมแล้ว
- ถ้า temp ว่างหรือองค์ประกอบสุดท้ายของ temp <=x แล้ว
- ใส่ x ลงในอุณหภูมิ
- เรียกแก้ปัญหา (nums, i + 1, ชั่วคราว)
- ลบหนึ่งองค์ประกอบจากจุดสิ้นสุดของอุณหภูมิ
- จากวิธีหลัก เรียก Solve(nums, 0, temp)
- ผลตอบแทน
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
#includeใช้เนมสเปซ std;void print_vector(vector > v){ cout <<"["; for(int i =0; i > res; โมฆะแก้ ( vector &nums, int start, vector temp){ if(temp.size()> 1){ res.push_back(temp); } ตั้งค่า เข้าชม; สำหรับ(int i =start; i > findSubsequences(vector &nums) { res.clear(); เวกเตอร์ อุณหภูมิ; แก้ (nums, 0, อุณหภูมิ); ผลตอบแทน res; }};main(){ vector v ={5,6,7,8}; โซลูชัน ob; print_vector(ob.findSubsequences(v));}
อินพุต
[4,6,7,8]