【力扣 中等 C++】491. 非递减子序列

目录

题目

解法一:回溯


题目

待添加

解法一:回溯

class Solution
{
private:
    void backTrack(vector>& subseqs, vector& subseq,
        const vector& nums, int startIndex)
    {
        if (subseq.size() >= 2)
            subseqs.push_back(subseq);

        unordered_set used;
        for (int i {startIndex}; i < nums.size(); i++)
        {
            // 保证递增:!subseq.empty() && subseq.back() > nums[i]
            // 去重:used.contains(nums[i])
            if ((!subseq.empty() && subseq.back() > nums[i]) || used.contains(nums[i]))
                continue;
            used.insert(nums[i]);

            subseq.push_back(nums[i]);
            backTrack(subseqs, subseq, nums, i + 1);
            subseq.pop_back();
        }
    }

public:
    vector> findSubsequences(vector& nums)
    {
        vector> subseqs;
        vector subseq;

        backTrack(subseqs, subseq, nums, 0);
        return subseqs;
    }
};

你可能感兴趣的:(算法,leetcode,数据结构,c++,开发语言)