首页 > 其他分享 >未排序数组的树层去重

未排序数组的树层去重

时间:2024-10-30 17:33:19浏览次数:1  
标签:nums 元素 back st 树层 数组 path 排序

491.递增子序列
reference

/* 未排序 + 树层去重
之前在进行树层去重时,我们都是先对元素排序,这样如果树层中的元素重复,
它们的位置一定是相邻的,因此我们可以通过 !st[i-1] 来判断树层元素是否重复
但现在我们不能对元素进行排序,该如何去重呢?
其实也很简单,对于树中的每一层,我们只需要用一个容器st来存放当前树层中出现的元素
这样判断的方式就成了 !st.find(i-1)
在这里,由于元素范围在[-100,100],我们可以使用数组来作为这个容器
*/
class Solution {
public:
    vector<vector<int>> findSubsequences(vector<int>& nums) {
        vector<vector<int>> res;
        vector<int> path;
        const int OFFSET = 100;
        function<void(int)> dfs = [&](int u) {
            if(path.size() > 1) res.push_back(path); // 因为题目没有限定元素的个数,所以找到合法解直接加入答案集合
            if(u == nums.size())    return ;
            bool st[210]{false};
            for(int i = u; i < nums.size(); i ++ ) {
                if(!path.empty() && nums[i] < path.back())  continue; // 不满足递增
                if(st[nums[i] + OFFSET])  continue; // 树层重复
                st[nums[i] + OFFSET] = true; // 已经出现过的元素放入容器
                path.push_back(nums[i]);
                dfs(i + 1);
                path.pop_back();
            }
        };
        dfs(0);
        return res;
    }
};

标签:nums,元素,back,st,树层,数组,path,排序
From: https://www.cnblogs.com/ALaterStart/p/18516257

相关文章

  • 《贪婪算法实战:寻找最短无序连续子数组的深度解析与实现》
    ......
  • 插入排序瞟一眼就搞定!
    插入排序的定义插入排序定义互联网到处都有,就不巴巴了,记住一句话:把后面没排序的插入到前面排序的!插入排序步骤默认第一个元素为已排序元素,从第二个开始进行比较。插入到前面后第一第二个元素为有序,继续比较第三个元素。后面就一样操作,直到最后一个元素比较完成。......
  • JavaScript 实现对 JSON 对象数组数据进行分页处理
    JavaScript实现对JSON对象数组数据进行分页处理在前端JavaScript中对JSON对象数组进行分页,可以通过以下方式实现:分页函数示例代码假设有一组JSON对象数据,比如一组用户信息:constdata=[{id:1,name:"Alice"},{id:2,name:"Bob"},{id:3,name:"......
  • 开窗函数、聚合函数、排序函数
    ‌SQL开窗函数(WindowFunctions)主要用于对数据集进行分区和排序,并在每个分区内进行聚合计算,同时保持数据的行级细节。开窗函数的语法形式为:函数+OVER(PARTITIONBY<分组用列>ORDERBY<排序用列>)。其中,PARTITIONBY用于定义分区,ORDERBY用于定义窗口内数据的排序。括号中的......
  • 算法学习笔记5: 排序算法
    排序算法归并排序时间复杂度O(nlogn)空间复杂度O(n),稳定排序就是给定两个有序数组,将两个数组合并在一起升序。定义一个更大的数组,给定两个指针分别指向两个数组,每次取较小值放入新数组。voidmergeSort(inta[],intl,intr){ if(l>=r)return; intmid=l+r>>1;......
  • 2024-10-30:或值至少 K 的最短子数组 I。用go语言,给定一个非负整数数组 nums 和一个整
    2024-10-30:或值至少K的最短子数组I。用go语言,给定一个非负整数数组nums和一个整数k,我们需要判断数组中是否存在一个最短的非空子数组,使得该子数组所有元素的按位或(OR)运算结果至少为k。如果找到了这样的子数组,返回其长度;如果不存在,则返回-1。输入:nums=[1,2,3],k=2。......
  • 快速排序算法
    快速排序算法是一种高效的排序算法,由C.A.R.Hoare在1960年提出。它的基本思想是分而治之,通过一趟排序将待排序的元素分割成两个部分,其中一部分的所有元素都比另一部分的所有元素小,然后递归地对这两部分继续进行排序操作,整个排序过程可以递归进行,以达到整个数据变成有序序列。快......
  • 代码随想录算法训练营第六天| leetcode242.有效的字母异位词、leetcode349.两个数组的
    1.leetcode242.有效的字母异位词题目链接:242.有效的字母异位词-力扣(LeetCode)文章链接:代码随想录视频链接:学透哈希表,数组使用有技巧!Leetcode:242.有效的字母异位词哔哩哔哩bilibili自己的思路:首先就是对字符串进行分开成一个一个单独的字母,然后使用列表存储这些数据,再对......
  • C语言顺序表(类似数组结构)
    ////CreatedbyAdministratoron2024/10/25.//顺序表结构//#ifndefORDER_TABLE_H#defineORDER_TABLE_H/*声明顺序表的长度*/#defineSize5/***声明顺序表结构体*/typedefstructTable{int*head;intlength;intsize;}table;/***......
  • 更新 state 中的数组
    同对象一样,当你想要更新存储于state中的数组时,你需要创建一个新的数组(或者创建一份已有数组的拷贝值),并使用新数组设置state。在没有mutation的前提下更新数组每次要更新一个数组时,你需要把一个新的数组传入state的setting方法中。为此,你可以通过使用像filter()和map......