首页 > 其他分享 >刷题分享12_3

刷题分享12_3

时间:2024-12-03 12:28:29浏览次数:9  
标签:12 nums res back used vector 分享 backtracking 刷题

刷题分享

这两道题目均是子集问题,其实核心与组合问题一样,不同之处在于组合问题只有在叶子节点才收集结果(即存在终止条件),而子集问题则是要在每一个节点处都收集结果。第二个题还多加了一个去重的逻辑,大体是:使用一个used数组,先对原数组排序,如果遍历到了两个相邻的元素相同,那么要看此时前一个元素在这层递归之前有没有调用过,如果调用过,说明这两个相同数字会在一个结果集里,则无需操作。如果前一个数字没有调用过,说明这两个数字不出现在同一个结果集里,就会造成重复,所以此时应该剪枝

1.(力扣78)

class Solution {
public:
    vector<vector<int>>res;
    vector<int>path;

    void backtracking(vector<int>& nums,int startindex){
        res.push_back(path);
        if(startindex>=nums.size()){
            return ;
        }
        for(int i=startindex;i<nums.size();i++){
            path.push_back(nums[i]);
            backtracking(nums,i+1);
            path.pop_back();
        }
    }

    vector<vector<int>> subsets(vector<int>& nums) {
        backtracking(nums,0);
        return res;
    }
};

2.(力扣90)

class Solution {
public:
    vector<vector<int>>res;
    vector<int>path;
    
    void backtracking(vector<int>& nums,vector<int>& used,int startindex){
        res.push_back(path);
        if(startindex>=nums.size()){
            return ;
        }
        for(int i=startindex;i<nums.size();i++){
            if(i>0&&nums[i]==nums[i-1]&&used[i-1]==0){
                continue;
            }
            path.push_back(nums[i]);
            used[i]=1;
            backtracking(nums,used,i+1);
            path.pop_back();
            used[i]=0;
        }
    }

    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        vector<int>used(nums.size(),0);
        backtracking(nums,used,0);
        return res;
    }
};

标签:12,nums,res,back,used,vector,分享,backtracking,刷题
From: https://blog.csdn.net/2401_86941858/article/details/144211553

相关文章

  • CTFshow图片刷题
    misc1打开就是flagctfshow{22f1fb91fc4169f1c9411ce632a0ed8d}misc2改后缀名pngctfshow{6f66202f21ad22a2a19520cdd3f69e7b}misc3.bpg的图片用这个工具打开BPGImageformatctfshow{aade771916df7cde3009c0e631f9910d}misc4逐个改后缀名就可以得到图......
  • 【每日一题】20241203
    【每日一题】如图所示,将物块\(a\)分别放入光滑的\(A\)轨道和\(B\)轨道的最高点,以零初速度滑至轨道的最低点所用时间分别为\(t_1\)与\(t_2\).则已知\(A\)轨道与\(B\)轨道完全一至,则A.\(t_1>t_2\)B.\(t_1<t_2\)C.\(t_1=t_2\)D.\(t_1\geqt_2\)E.\(t_1\l......
  • 2024/12/2【链表】LeetCode 142 环形链表 II 【X】
    题目链接:https://leetcode.cn/problems/linked-list-cycle-ii/description/题解链接:https://www.programmercarl.com/0142.%E7%8E%AF%E5%BD%A2%E9%93%BE%E8%A1%A8II.html#%E5%85%B6%E4%BB%96%E8%AF%AD%E8%A8%80%E7%89%88%E6%9C%AC没做出来......
  • 【2024-12-02】正确保养
    20:00决定不再等待平静自己降临。他打算去做一-件事,让自己内心得到平静。                                                 ——罗伯特·麦卡蒙周六早上,我让何太给我......
  • 12.3随笔
    这里是12.3随笔。作业留档:编写程序,实现由邻接表存储实现无向图的深度优先搜索遍历的功能。顶点为字符型。输入格式:第一行输入顶点个数及边的个数,第二行依次输入各顶点,第三行开始依次输入边的两个顶点,用空格分开。最后输入深度优先遍历的起始点。输出格式:输出深度优先遍历结......
  • 高级java每日一道面试题-2024年12月02日-JVM篇-虚拟机为什么使用元空间替换了永久代?
    如果有遗漏,评论区告诉我进行补充面试官:虚拟机为什么使用元空间替换了永久代?我回答:在Java高级面试中,关于虚拟机为何使用元空间替换了永久代的问题,可以从以下几个方面进行详解:一、背景与概念永久代(PermanentGeneration):内存溢出:永久代的大小是固定的,且默认值较小......
  • 12-3实验
    publicstaticclassWorldCount_MapperextendsMapper<LongWritable,Text,Text,IntWritable>{@Overrideprotectedvoidmap(LongWritablekey,Textvalue,Mapper<LongWritable,Text,Text,IntWritable>.Contextcontext)......
  • 1202-数据流中的中位数
    最小栈leetcode295.题目大意:给定一个数据流,实现一个以查找中位数为方法的类,该类需要有初始化构造方法、新增数据值和查找中位数的方法解题思路:主要难点是想用什么方法,这题肯定不能来一个数字就给数据排序,得用到数据结构,也就是小顶堆和大顶堆,小顶堆存储最大值部分,大顶堆存储最......
  • 【双堆懒删除】codeforces 1294 D. MEX maximizing
    前言双堆懒删除当需要维护若干元素中的最大值(或最小值)时,可以用一个堆维护,但是堆只擅长处理堆顶元素,对堆中任意元素的处理就束手无策了。此时,可以引入另外一个堆,我们定义原来的堆为保存堆\(ex\),新的堆为懒删除堆\(de\)。那么当需要从保存堆中删除任意一个元素时,可以先将元素放......
  • Leecode刷题C语言之判断是否可以赢得数字游戏
    执行结果:通过执行用时和内存消耗如下:  boolcanAliceWin(int*nums,intnumsSize){intsingle_digit_sum=0;intdouble_digit_sum=0;for(inti=0;i<numsSize;i++){if(nums[i]<10){single_digit_sum+=nums[i];......