首页 > 其他分享 >Day 28 | 491.递增子序列 、46.全排列、 47.全排列 II

Day 28 | 491.递增子序列 、46.全排列、 47.全排列 II

时间:2024-06-22 18:31:45浏览次数:23  
标签:排列 nums 46 47 II https path com

491.递增子序列

本题和大家刚做过的 90.子集II 非常像,但又很不一样,很容易掉坑里。

https://programmercarl.com/0491.递增子序列.html

视频讲解:https://www.bilibili.com/video/BV1EG4y1h78v
给你一个整数数组 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]]

思考

这道题不能排序,要保持原始顺序,所以使用set进行去重。

class Solution:
    def findSubsequences(self, nums: List[int]) -> List[List[int]]:
        path = []
        res_all = []
        def backtracking(nums,start_index):
            if len(path) >=2:
                res_all.append(path[:])
            used_set = set()
            for i in range(start_index,len(nums)):
                #if len(path) == 0 or (nums[i] not in used_set and nums[i] >= path[-1]):
                if (path and nums[i]<path[-1]) or (nums[i] in used_set):
                    continue 
                used_set.add(nums[i])
                path.append(nums[i])
                backtracking(nums,i+1)
                path.pop()               
        backtracking(nums,0)
        return res_all

46.全排列

本题重点感受一下,排列问题 与 组合问题,组合总和,子集问题的区别。 为什么排列问题不用 startIndex
https://programmercarl.com/0046.全排列.html
视频讲解:https://www.bilibili.com/video/BV19v4y1S79W

47.全排列 II

本题 就是我们讲过的 40.组合总和II 去重逻辑 和 46.全排列 的结合,可以先自己做一下,然后重点看一下 文章中 我讲的拓展内容: used[i - 1] == true 也行,used[i - 1] == false 也行

https://programmercarl.com/0047.全排列II.html

视频讲解:https://www.bilibili.com/video/BV1R84y1i7Tm

标签:排列,nums,46,47,II,https,path,com
From: https://www.cnblogs.com/forrestr/p/18262604

相关文章

  • def init(parameterlist),是用来创建类的方法,其中parameterlist是方法所需要传入的属性
    问题描述:definit(parameterlist),是用来创建类的方法,其中parameterlist是方法所需要传入的属性参数。请问参数是按照顺序排列的吗?问题解答:是的,在Python中,__init__(self,parameterlist)方法的参数是按照顺序排列的。这意味着在创建类的实例时,传递给构造函数的参数需要按......
  • [题解]AT_abc247_f [ABC247F] Cards
    思路对于包含数\(x\)的卡牌,两张之中必定要选择一张,由此想到2-SAT的思想。我们将所有带有\(x\)的卡牌两两连边,每一条边连接的点都表示两点必须选择一个。不难发现,我们这样会得出若干个环。(因为对于每一张卡牌的出边为\(2\),一定会形成环)在每一个环中的选择情况,不会影响答......
  • QOJ #8473. Matrices and Determinants
    唉,不会线性代数了,做了三个小时。为了求行列式,显然要先把\(A\)消成上三角矩阵,记作\(A'\)。我们显然可以在操作\(A\)的时候求出将\(A\)消成\(A'\)的操作矩阵\(M\),则我们可以构造\(A'=B'C'\),再将\(B'\)乘上\(M^{-1}\)就可以得到原来的\(B\)。判掉\(A\)的行列式不......
  • 全排列问题
    1letstr="abbd"2functionArrange(str){3if(str.length<=2){4returnstr.length===2?[str,str[1]+str[0]]:[str]5}6letarrRes=[]7letarrStr=str.split('');8for(leti=0;i<a......
  • redis自学(47)服务端优化
    持久化配置Redis的持久化虽然可以保证数据安全,但也会带来很多额外的开销,因此持久化请遵循下列建议:①用来做缓存的redis实例尽量不要开启持久化功能②建议关闭RDB持久化功能,使用AOF持久化(RDB的数据安全性一直是有问题的,两次RDB的时间比较长,又不能频繁的RDB,因为耗时久而且需......
  • 洛谷 P1030 [NOIP2001 普及组] 求先序排列
    因为题目求先序,意味着要不断找根。那么我们来看这道题方法:(示例)中序ACGDBHZKX,后序CDGAHXKZB,首先可找到主根B;那么我们找到中序遍历中的B,由这种遍历的性质,可将中序遍历分为ACGD和HZKX两棵子树,那么对应可找到后序遍历CDGA和HXKZ(从头找即可)从而问题就变成求1.中序遍历ACGD,后序......
  • 用ADAU1466开发板教你做音频开发,有手就行(二十二):按键控制音量+-和静音(IO的应用)
    作者的话本章开始正式进入ADAU1466的开发教程,什么叫有手就行,看下去就明白了。特别注意因为ADAU1452和ADAU1466是P2P完全兼容的,管脚兼容,硬件设计兼容,软件程序配置全部都兼容,差别在于ADAU1466的内存更大。我的文章里所用到的程序都是基于ADAU1452的,程序也是基于ADAU1452的,A......
  • 若依框架页面新增时,富文本加入图片保存时出现:JSON parse error: Unexpected character
    在使用若依框架的富文本框新增时,如果插入一个图片的时候会出现一个JSONparseerror:Unexpectedcharacter('/'(code47)):maybea(non-standard)comment?(notrecognizedasonesinceFeature'ALLOW_COMMENTS'notenabledforparser);nestedexceptioniscom.fas......
  • 题解:P10639 BZOJ4695 最佳女选手
    区间最值操作基础题,但是有点码农。依然考虑势能线段树,维护区间和\(\textrm{sum}\)、最大值\(\textrm{M1}\)、次大值\(\textrm{M2}\)、最大值个数\(\textrm{Mcnt}\)、最小值\(\textrm{m1}\)、次小值\(\textrm{m2}\)、最小值个数\(\textrm{mcnt}\),另外需要区间加标记\(\tex......
  • Leedcode【146】. LRU 缓存——Java实现
    Problem: 146.LRU缓存思路解题方法复杂度Code效果思路使用一个双向链表来维护缓存的访问顺序,最近使用的节点在链表头部,最久未使用的节点在链表尾部。使用一个哈希表来存储缓存中的键值对,哈希表中的键对应双向链表中的节点。解题方法Node类:表示双向链表的节点,每......