Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Dãy con tăng dần (Increasing Subsequences) trong C++

Cho mảng số nguyên, tìm tất cả dãy con tăng dần (không giảm) độ dài ≥ 2, loại bỏ trùng lặp.

Ví dụ: [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]].

Thuật toán (Backtracking + Set tại mỗi mức)

  1. DFS từ vị trí start, mảng tạm temp.
  2. Nếu temp.size()>1 → thêm vào kết quả.
  3. Dùng set visited tại mỗi mức để tránh chọn trùng giá trị.
  4. Chỉ thêm nums[i] nếu temp rỗng hoặc nums[i] >= temp.back().

Mã nguồn C++

#include <bits/stdc++.h>
using namespace std;

class Solution {
    vector> res;
    void solve(vector& nums, int start, vector& temp) {
        if (temp.size() > 1) res.push_back(temp);
        set visited;
        for (int i=start; i> findSubsequences(vector& nums) {
        res.clear();
        vector temp;
        solve(nums, 0, temp);
        return res;
    }
};

int main() {
    vector v = {4,6,7,7};
    Solution ob;
    auto ans = ob.findSubsequences(v);
    for (auto& seq : ans) {
        cout << "[";
        for (int x : seq) cout << x << ",";
        cout << "] ";
    }
    return 0;
}

Đầu vào / Đầu ra

Input: [4,6,7,7]

Output: 8 dãy con như mô tả.