操作起来 3.22

本文探讨了C++中LeetCode题目关于子集生成的两种解决方案,重点比较了`bt`函数的不同实现,并解析了`const`关键字在定义和运行时的区别。通过MOHAMAD书中的实例,展示了如何迁移双向迁移过程中的代码优化技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3.22

Leetcode

子集

class Solution {
public:
    vector<vector<int>>ans;
    vector<int>path;
    void bt(vector<int>& nums, int index){
        ans.push_back(path);
        for(int i = index; i < nums.size(); i++){
            path.push_back(nums[i]);
            bt(nums, i+1);
            path.pop_back();
        }
    }
    vector<vector<int>> subsets(vector<int>& nums) {
        bt(nums, 0);
        return ans;
    }
};

子集2

class Solution {
public:
    vector<vector<int>>ans;
    vector<int>path;
    //有问题,代码和思路不匹配,应该省略掉横向的重复组合
    //之前有到类似的题
    //重点在于相等并加一个判断 或者 i > startindex也可以,这样只会去掉同重复不会去掉纵向的重复
    void bt(vector<int>& nums, int index, vector<bool>& condi){
        ans.push_back(path);
        for(int i = index; i < nums.size(); i++){
            if(i > 0 && !condi[i-1] && nums[i] == nums[i-1])   continue;
            path.push_back(nums[i]);
            condi[i] = true;
            bt(nums, i+1, condi);
            condi[i] = false;
            path.pop_back();
        }
    }
    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        vector<bool>condi(nums.size(), false);
        bt(nums, 0, condi);
        return ans;
    }
};

C++

define和const区别

define宏定义是在预处理阶段处理,没有类型,自然没有类型检查,仅仅依靠宏定义进行字符串的展开,遇到多少次展开多少次。因为define宏定义仅仅是展开,因此系统并不会为宏定义分配内存,但是从汇编角度来讲,define却以立即数的方式保留了多份数据的拷贝

对于const来说,const是在编译期间进行处理的,const有类型,有类型检查,系统运行时也会为const量分配内存,而且从汇编的角度讲,const常量在出现的地方保留的是真正数据的内存地址,只保留了一份数据的拷贝,省去了不必要的内存空间。而且有时候编译器不会为普通的const常量分配内存,而是直接将const添加到符号表,省去了读取和写入内存的操作,效率更高

MOHAMAD书学习, D1Q2代码案例,迁移过程双向的

打球 + 小说 + 帮老师打打工。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值