首页 > 编程语言 >day29 回溯算法part5 代码随想录算法训练营 491. 非递减子序列

day29 回溯算法part5 代码随想录算法训练营 491. 非递减子序列

时间:2024-02-19 11:35:23浏览次数:30  
标签:day29 nums E5% res 随想录 491 算法 path 节点

题目:491. 非递减子序列

我的感悟:

  • 难不怕,不行就抄一遍,再默写一遍,多记忆几遍。
  • 加油!!!

理解难点:

  • uset 是本层的, 
  • res 收获的是节点(满足要求的节点),不用return (用了return 是仅仅收集叶子节点的)
  • 判断 的逻辑,是nums[i] 当前的节点和目标的path的区别

代码示例:

class Solution:
    def findSubsequences(self, nums: List[int]) -> List[List[int]]:
        res = []
        self.backtracking(nums,0,[],res)
        return res
    
    def backtracking(self,nums,start_index,path,res):
        # 收获结果,不是到叶子节点收获,是每个节点达到要求就收获
        if len(path) > 1:
            res.append(path[:])
        # 遍历
        uset = set()    # 仅仅只记录本层
        for i in range(start_index,len(nums)):
            # 写跳过的逻辑
            if (path and nums[i] < path[-1]) or (nums[i] in uset):
                continue 
                # 当前nums[i]值小于path[-1] 例如 [4,7] 6就小于7 就跳过.
                # 或者nums[i] 在本层已经出现过,使用过了. 也跳过

            path.append(nums[i])
            uset.add(nums[i])
            self.backtracking(nums,i+1,path,res)
            path.pop()

通过截图:

扩展写法:

资料:

491.递增子序列 

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

https://programmercarl.com/0491.%E9%80%92%E5%A2%9E%E5%AD%90%E5%BA%8F%E5%88%97.html

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

标签:day29,nums,E5%,res,随想录,491,算法,path,节点
From: https://www.cnblogs.com/liqi175/p/18020716

相关文章

  • 第十六节:各种排序算法总结和性能测试
    一.        二.        三.         !作       者:Yaopengfei(姚鹏飞)博客地址:http://www.cnblogs.com/yaopengfei/声     明1:如有错误,欢迎讨论,请勿谩骂^_^。声     明2:原创博客请在转载......
  • 复习回顾-回溯算法-90. 子集 II 【犹豫】
    注意点&感悟:对过滤条件放在for里面,还是外面,有些犹豫了。【疑问,先搁置】我感觉for里面,应该是进去树枝的过程,for外面写,应该是终止条件。================又看了一眼视频,for里面是取数的过程,所以,应该取数的过程,进行了剪枝。题目链接:90.子集II自己独立写的代码:classSo......
  • 回顾复习-回溯算法-78. 子集
    注意点&感悟:复习是个好东西题目链接:78.子集自己独立写的代码:classSolution:defsubsets(self,nums:List[int])->List[List[int]]:res=[]self.backtracking(nums,0,[],res)returnresdefbacktracking(self,nums,start_index,......
  • m基于码率兼容打孔LDPC码oms最小和译码算法的LDPC编译码matlab误码率仿真
    1.算法仿真效果matlab2022a仿真结果如下: 2.算法涉及理论知识概要       码率兼容打孔LDPC码BP译码算法是一种改进的LDPC译码算法,能够在不同码率下实现更好的译码性能。该算法通过在LDPC码中引入打孔操作,使得码率可以灵活地调整,同时利用BP(BeliefPropagation)译码算法......
  • 基于稀疏表示的小波变换多光谱图像融合算法matlab仿真
    1.算法运行效果图预览小波变换融合   PCA融合   基于稀疏表示的小波变换多光谱图像融合算法   性能指标对比   2.算法运行软件版本matlab2022a 3.算法理论概述       随着遥感技术的飞速发展,多光谱图像融合在地球观测、环境监测、......
  • 基于深度学习的性别识别算法matlab仿真
    1.算法运行效果图预览  2.算法运行软件版本matlab2022a  3.算法理论概述        随着深度学习的飞速发展,其在计算机视觉领域的应用越来越广泛。性别识别作为计算机视觉的一个重要分支,对于人脸分析、社交网络和机器人交互等领域有着重要意义。性别识别是......
  • 数据结构与算法---------4
    树树是一种一对多的结构,它在一些有层次结构的系统中使用非常多,例如政府系统中,它们的关系就可以用树来表示。 当树中没有节点时,称为空树。树中有一个称为"根"特殊节点。其中每一颗子树不相交也就是没有环。除了根节点之外的所有节点有且只有一个父节点。一颗树有N个节点,那么......
  • 常用算法
    最长递增子序列长度给你一个整数数组nums,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组[0,3,1,6,2,2,7]的子序列。 解题思路:找出序列中最长子序列的长度1.动态规划法 ......
  • 代码随想录 day54 买卖股票
    买卖股票的最佳时机III这题可以一天进行两次交易解法增加了两种状态虽然不知道为什么这样就可以work但是挺符合逻辑的意思就是把之前的两天交易合到一天进行计算收益也在之前一次交易基础上进行计算买卖股票的最佳时机IV这题就是这类问题的最难情况解法的思想就是......
  • 字符串匹配——哈希算法
    一、算法原理我们不直接比较字符串\(S\)的字串和模式串\(T\)是否相等,而是比较二者的哈希值。设字符串\(S\)的长度为\(l\),字符串\(T\)的长度为\(m\)。取两个互素的常数\(b\)和\(h\)(\(l<b<h\)),设字符串\(C=c_1c_2...c_m\),则哈希函数为:\[H(C)=(c_1b^{m-1}+......