0
点赞
收藏
分享

微信扫一扫

leetcode491. 递增子序列

软件共享软件 2022-02-05 阅读 48

一:论语

在这里插入图片描述

二:题目

在这里插入图片描述

三:上码

class Solution {
public:
    vector<vector<int> >ans;
    vector<vector<int> >ans1;
    vector<int> path;

    void backstacking(vector<int>& nums,int index) {

        if(path.size() >= 2) {
            ans.push_back(path);

        }
        unordered_set<int> uset; // 使用set对本层元素进行去重

        for(int i = index; i < nums.size(); i++) {
            
            //当递归到这层的时候 如果我们不是递增的时候就直接跳过
            if(!path.empty() && nums[i] < path.back()) continue;

            if(uset.find(nums[i]) != uset.end()) continue;//去重  不等于最后一个元素的话 那么就是
                                                                //容器中有这个元素
            uset.insert(nums[i]);
            path.push_back(nums[i]);
            backstacking(nums,i+1);
            path.pop_back();
        }

    }
    vector<vector<int>> findSubsequences(vector<int>& nums) {
       /**
       思路:1.这里我们处理递增顺序的时候需要注意的 我们在回溯的递归中 纵向的递归中 我们用 nums[i] 
            和path.back() 进行比较  如果不是递增的话 那么我们就选择  continue 越过本次的for循环的
            一个元素
            2.注意题目中说的是不同的递增子序列,那么我们还是双管齐下  第一管:我们设置 index 
              第二管:我们先排序的话 然后的话  再在回溯的横向遍历的时候 遇见相同的元素 直接跳过
              但这并不影响 纵向遍历的时候 遇见相同的元素还可以在path中 但是本题中我们不能排序
              但是我们们可以设置一个set容器来解决
       */ 
        backstacking(nums,0);
        return ans;
    }
};

在这里插入图片描述
晚安!

举报

相关推荐

0 条评论