| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> LeetCode 0491. 递增子序列 -> 正文阅读 |
|
[数据结构与算法]LeetCode 0491. 递增子序列 |
【LetMeFly】491.递增子序列:两大方法三小方法力扣题目链接:https://leetcode.cn/problems/increasing-subsequences/ 给你一个整数数组 数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。 ? 示例 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]] ? 提示:
方法一:二进制枚举二进制枚举每一种子序列,然后判断这个子序列是否合法,如果合法就添加到答案中 其中二进制的每一位对应原始数组中的一个元素,这一位为0则不取这个元素,否则取这个元素。 主要答案需要去重,可以使用自带哈希表
AC代码C++
方法一.2:针对方法一中哈希表的优化与方法一相比,我们使用 u n o r d e r e d s e t unordered_set unordereds?et,这样插入的效率会变高。 但是 C + + C++ C++的 S T L STL STL默认没有 v e c t o r vector vector的哈希函数,需要我们自定义 v e c t o r vector vector的哈希函数或者将 v e c t o r vector vector映射为整数,同时将整数映射为 v e c t o r vector vector 具体映射方法为:
AC代码C++
方法三:深度优先搜索DFS我们用函数 用一个临时数组 t e m p temp temp来存放当前方案 如果 l o c = = n u m s . s i z e ( ) loc == nums.size() loc==nums.size()(已经超出有效范围了),那么就看 t e m p temp temp中存放的方案是否合法(至少两个数),如果合法就添加到答案中。 如果 l o c < n u m s . s i z e ( ) loc < nums.size() loc<nums.size(),那么就有“选nums[loc]”和“不选nums[loc]”两种方案。“选nums[loc]”的前提是 n u m s [ l o c ] > = l a s t N u m nums[loc] >= lastNum nums[loc]>=lastNum。 如果选择 n u m s [ l o c ] nums[loc] nums[loc],那么就将 n u m s [ l o c ] nums[loc] nums[loc]添加到临时数组中,递归深搜,返回时再将其从临时数组的末尾移除。 如果不选择 n u m s [ l o c ] nums[loc] nums[loc],那么当且仅当 n u m s [ l o c ] ≠ l a s t N u m nums[loc] \neq lastNum nums[loc]=lastNum时才进行深搜,因为前面的 l a s t N u m lastNum lastNum和 n u m s [ l o c ] nums[loc] nums[loc]相等,所以“选了lastNum不选nums[loc]”和“选了nums[loc]不选lastNum”是等价的,不选择 n u m s [ l o c ] nums[loc] nums[loc]而仍然递归深搜会导致答案重复。
虽然时间复杂度看似和方法一相同,但实际执行效率还是要高一些。 AC代码C++
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 19:43:29- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |