您当前的位置: 首页 > 

IT之一小佬

暂无认证

  • 0浏览

    0关注

    1192博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

递增子序列

IT之一小佬 发布时间:2021-08-31 22:31:00 ,浏览量:0

给你一个整数数组 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]]

示例代码1:

class Solution:
    def findSubsequences(self, nums: List[int]) -> List[List[int]]:
        res = []

        def dfs(nums, tmp):
            if len(tmp) > 1:
                res.append(tmp)
            cur = set()
            for index, i in enumerate(nums):
                if i in cur:
                    continue
                if not tmp or i >= tmp[-1]:
                    cur.add(i)
                    dfs(nums[index+1:], tmp+[i])
        dfs(nums, [])
        return res

 示例代码2:

class Solution:
    def findSubsequences(self, nums: List[int]) -> List[List[int]]:
        res = []
        path = []
        def backtrack(nums,startIndex):
            repeat = []  #这里使用数组来进行去重操作
            if len(path) >=2:
                res.append(path[:])  #注意这里不要加return,要取树上的节点
            for i in range(startIndex,len(nums)):
                if nums[i] in repeat:
                    continue
                if len(path) >= 1:
                    if nums[i] < path[-1]:
                        continue
                repeat.append(nums[i])  #记录这个元素在本层用过了,本层后面不能再用了
                path.append(nums[i])
                backtrack(nums,i+1)
                path.pop()
        backtrack(nums,0)
        return res

关注
打赏
1665675218
查看更多评论
立即登录/注册

微信扫码登录

0.0405s