leetcode-491:递增子序列

简介: leetcode-491:递增子序列

题目

题目链接

给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。

数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。

示例 1:

输入:nums = [4,6,7,7]
输出:[[4,6],[4,6,7],[4,6,7,7],[4,7],[4,7,7],[6,7],[6,7,7],[7,7]]

示例 2:

输入:nums = [4,4,3,2,1]
输出:[[4,4]]

解题

if(i>startIndex&&nums[i]==nums[i-1]) continue;//只能去除连续的,如果出现[1,2,3,2,1]这种例子就不行了,会出现两次[1,2],之前的例子中是因为可以排序,但是这个题不行

通过uset要确定 当前 横向(for) 有无出现过相同的数字,来去重。

class Solution {
public:
    vector<vector<int>> res;
    vector<int> path;
    void backtracing(vector<int>& nums,int startIndex){
        if(path.size()>=2){
            res.push_back(path);
        }
        unordered_set<int> uset;
        for(int i=startIndex;i<nums.size();i++){
            if((!path.empty()&&nums[i]<path.back())||uset.find(nums[i])!=uset.end()){
                continue;
            }
            uset.insert(nums[i]);
            path.push_back(nums[i]);
            backtracing(nums,i+1);
            path.pop_back();
        }
    }
    vector<vector<int>> findSubsequences(vector<int>& nums) {
        backtracing(nums,0);
        return res;
    }
};

换种写法

class Solution {
public:
    vector<vector<int>> res;
    vector<int> path;
    void backtracing(vector<int>& nums,int startIndex){
        if(path.size()>=2){
            res.push_back(path);
        }
        unordered_set<int> uset;
        for(int i=startIndex;i<nums.size();i++){
            if((path.empty()||!path.empty()&&nums[i]>=path.back())&&uset.count(nums[i])==0)
            {
                uset.insert(nums[i]);
                path.push_back(nums[i]);
                backtracing(nums,i+1);
                path.pop_back();
            }
        }
    }
    vector<vector<int>> findSubsequences(vector<int>& nums) {
        backtracing(nums,0);
        return res;
    }
};

java

class Solution {
    List<List<Integer>> res=new LinkedList<>();
    List<Integer> path=new LinkedList<>();
    void dfs(int[] nums,int startIndex){
        if(path.size()>=2){
            res.add(new LinkedList<>(path));
        }
        Set<Integer> set=new HashSet<>();
        for(int i=startIndex;i<nums.length;i++){
            if((path.isEmpty()||!path.isEmpty()&&nums[i]>=path.get(path.size()-1))&&set.contains(nums[i])==false){
                set.add(nums[i]);
                path.add(nums[i]);
                dfs(nums,i+1);
                path.remove(path.size()-1);
            }
        }
    }
    public List<List<Integer>> findSubsequences(int[] nums) {
        dfs(nums,0);
        return res;
    }
}


相关文章
|
存储 算法 虚拟化
理解镜像文件
镜像文件根据其用途和格式的不同,可以分为多种类型。常见的镜像文件类型包括: ISO镜像:主要用于存储光盘(如CD、DVD)的内容。ISO镜像文件能够完整地复制光盘上的所有数据,包括文件系统、目录结构、文件内容以及权限设置等。 VHD(Virtual Hard Disk)镜像:是微软虚拟机(如Hyper-V)使用的虚拟硬盘文件格式。它用于存储虚拟机操作系统和应用程序的数据。 IMG镜像:一种通用的镜像文件格式,可用于存储多种类型的数据,包括磁盘分区、整个磁盘、文件系统等。 WIM(Windows Imaging Format)镜像:是微软用于部署Windows操作系统的镜像文件格式。它支持对多个
1853 8
|
机器学习/深度学习 人工智能 自然语言处理
《迈向认知智能新高度:深度融合机器学习与知识图谱技术》
在人工智能发展中,机器学习与知识图谱正成为推动行业变革的关键力量。机器学习使机器能从数据中学习并预测,而知识图谱以结构化方式描绘实体与关系,提供语义框架。两者的深度融合突破了传统AI的局限,提升了推理能力和决策质量,开启了认知智能的新篇章。通过特征工程、嵌入技术和联合推理等方法,二者在智能客服、金融风险评估和智能教育等领域展现出巨大应用潜力,尽管仍面临数据质量、语义理解和模型融合等挑战,但未来前景广阔,有望推动AI向更高水平发展。
423 1
|
运维 安全 BI
中小企业如何选购访客管理系统?
还在用传统方式登记访客信息?草料二维码提供免费高效的访客登记管理系统,扫码登记、数据统计、安全保障,1天即可上线,提升企业形象和管理效率!
|
人工智能 城市大脑 分布式计算
课时7:阿里云ET:人工智能可以是这样的
阿里云ET是阿里巴巴集团研发的超级人工智能,具备智能语音交互、图像视频识别、交通预测、情感分析等技能。作为杭州城市大脑的核心,ET依托强大的计算能力,在城市治理、工业制造、健康医疗等领域广泛应用,成为人类可靠的助手。其卓越的感知与思考能力,使ET在复杂局面下迅速做出最优决策。
496 0
|
存储 缓存 算法
数据空间
数据空间(Data Space)是计算机系统中用于存储和管理数据的区域。数据空间包括处理器内部的寄存器、数据缓存(Data Cache)以及内存中的数据段(Data Segment)等。数据空间的作用是接收、存储和处理来自外部设备或程序的数据,从而实现计算机系统的功能。
1543 4
|
人工智能 前端开发 Linux
github是怎么用的,如何下载仓库
github是怎么用的,如何下载仓库
|
存储 前端开发 JavaScript
从 Web 2.0 到 Web 3.0:前端开发的历史与未来
【10月更文挑战第4天】本文探讨了从 Web 2.0 到 Web 3.0 的前端开发演变过程。Web 2.0 时代,前端开发者从静态网页设计走向复杂交互,技术框架如 jQuery、React 和 Vue 带来了巨大的变革。而 Web 3.0 以区块链技术为核心,带来了去中心化的互联网体验,前端开发者面临与区块链交互、去中心化身份验证、分布式存储等新挑战。文章总结了 Web 2.0 和 Web 3.0 的核心区别,并为开发者提供了如何应对新技术的建议,帮助他们在新时代中掌握技能、设计更安全的用户体验。
509 0
从 Web 2.0 到 Web 3.0:前端开发的历史与未来
|
安全 前端开发 Linux
文件包含漏洞
文件包含漏洞
|
SQL 关系型数据库 PostgreSQL
|
存储
流媒体服务器与视频服务器有什么区别?
总的来说,流媒体服务器和视频服务器的主要区别在于,流媒体服务器更注重实时性和并发性,而视频服务器更注重存储和分发。
1071 2