美文网首页
491. 非递减子序列

491. 非递减子序列

作者: 名字是乱打的 | 来源:发表于2025-04-15 15:59 被阅读0次

一 题目:

二 思路:

涉及到一个位置数据放不放置会影响后续结果,我们都采用回溯的方法
本题目难在去冲,同一个位置我们需要保障一个数只放一次,那么这里我们用的是Set去冲,让一个数只放一次,比如刚进循环的时候curIndex=0,这时候我们其实放的是cur第一位置的数,这个位置同一个数只放一次,后面进到后面循环就是其他位次的数了,注意这里curIndex不同于cur放的第几个数哦,仅代表从curIndex位置开始选新的数

三 代码:


    List<List<Integer>> res = new ArrayList<>();

    public List<List<Integer>> findSubsequences(int[] nums) {
        if (nums.length < 2) {
            return res;
        }

        search(new LinkedList<>(), nums, 0);
        return res;
    }

    private void search(LinkedList<Integer> cur, int[] nums, int curIndex) {
        //没加一个数据后的新链一定都是不一样的
        if (cur.size() >= 2) {
            res.add(new ArrayList<>(cur));
        }

        if (curIndex >= nums.length) {
            return;
        }

        //从curIndex安排新加入数据
        //同一位置已安置过的数据
        Set<Integer> set = new HashSet<>();
        for (int i = curIndex; i < nums.length; i++) {
            // 1. 如果 set 中已经有与 nums[i] 相同的值了,说明加上 nums[i] 后的所有可能的递增序列之前已经被搜过一遍了,因此停止继续搜索。
            if (set.contains(nums[i])) {
                continue;
            }  else {
                //2.set中没有与 nums[i] 相同的值
                set.add(nums[i]);

                //如果满足放进去的条件就放试试,放完就移除继续后面算不放,不需要单独写不放
                if (cur.isEmpty() || nums[i] >= cur.getLast()) {
                    cur.add(nums[i]);
                    search(cur, nums, i + 1);
                    cur.removeLast();
                }
            }
        }
    }

相关文章

  • POJ3368-Frequent values(RMQ-ST)

    Frequent values题意:给出一串非递减序列,询问区间中出现次数最多的数的次数是多少?思路:非递减序列,...

  • leetcode 非递减序列

    题目要求 给定一个序列,改动其中的数字,能够构成非递减序列所更改次数少于2的函数返回真,否则返回假。 思路 首先考...

  • 2018-05-17

    《算法》 摇摆序列 当有连续递增或递减的子序列时,此时一定不是摇摆序列,只能从这个连续递增或递减的子序列中取某一个...

  • 665. 非递减数列

    没有看明白题目,因为不知道什么是非递减,后来看了帖子明白了,非递减就是这样的序列: 我们是这样定义一个非递减数列的...

  • 数组算法相关题目--Swift

    1、提莫攻击 2、 非递减数组 3、最长且连续的的递增序列

  • 旋转数组最小值

    将一个非递减序列的某一处切一刀,再把前半段序列放到后半段序列的后面,这样组成的新序列叫做“旋转数组”。要求获取一个...

  • 两个有序链表序列的合并(15 分)

    描述 本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。 函数接口定义: 其中List...

  • 02-线性结构1 两个有序链表序列的合并

    题目简述 本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。 函数接口定义: List...

  • 常用STL

    lower_bound 功能:返回一个非递减序列[first, last)中的第一个大于等于值val的位置。 声明...

  • 两个有序链表序列的合并

    本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。输入样例:1 3 52 4 6 8 ...

网友评论

      本文标题:491. 非递减子序列

      本文链接:https://www.haomeiwen.com/subject/bcojbjtx.html