找出所有子集异或和的和 全排列2

news2024/11/15 12:06:09

1863.找出所有子集异或和的和
解释:做本题没思路的话,强烈建议看本专栏上一篇博文

class Solution {
public:
    int sum = 0;
    int path = 0;
    int subsetXORSum(vector<int>& nums) {
        dfs(nums, 0);
        return sum;
    }
    void dfs(vector<int>& nums, int pos){
        if(pos == nums.size()){
            sum += path;
            return;
        }
        dfs(nums, pos+1);

        path ^= nums[pos];
        dfs(nums,pos+1);
        path ^= nums[pos];//恢复现场
    }
};

47.全排列2
解法一:
复用 全排列的代码,再在添加的时候检查一下是否存在该排列即可。(全排列的算法思想在前面博文已做说明)

class Solution {
public:
    vector<vector<int>> res;
    bool check[10] = {false};
    vector<int> path;
    vector<vector<int>> permuteUnique(vector<int>& nums) {
        dfs(nums);
        return res;
    }
    void dfs(vector<int>& nums) {
        if (path.size() == nums.size()) {
            auto it = find(res.begin(), res.end(), path);
            if (it == res.end())
                res.push_back(path);
            return;
        }
        for (int i = 0; i < nums.size(); ++i) {
            if (!check[i]) {
                path.push_back(nums[i]);
                check[i] = true;
                dfs(nums);
                // recovery
                path.pop_back();
                check[i] = false;
            }
        }
    }
};

解释:最初的检查方法是定义一个 std::unordered_map<std::vector<int>, int> check2;的,但是这样需要自定义比较方法,代码长度会大量增加,所以直接用迭代器找吧。不过具体示例方法有个标准代码,感兴趣可以看看;

#include <iostream>
#include <vector>
#include <unordered_map>

// 自定义哈希函数
struct VectorHash {
    std::size_t operator()(const std::vector<int>& v) const {
        std::size_t seed = 0;
        for (int i : v) {
            seed ^= std::hash<int>{}(i) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
        }
        return seed;
    }
};

// 自定义相等比较函数
struct VectorEqual {
    bool operator()(const std::vector<int>& v1, const std::vector<int>& v2) const {
        return v1 == v2;
    }
};

int main() {
    std::unordered_map<std::vector<int>, int, VectorHash, VectorEqual> check;

    // 示例用法
    std::vector<int> vec1 = {1, 2, 3};
    check[vec1] = 42;

    std::vector<int> vec2 = {1, 2, 3};
    std::cout << "Value associated with vec1: " << check[vec2] << std::endl;

    return 0;
}

对其使用一下:

// 自定义哈希函数
struct VectorHash {
    std::size_t operator()(const std::vector<int>& v) const {
        std::size_t seed = 0;
        for (int i : v) {
            seed ^=
                std::hash<int>{}(i) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
        }
        return seed;
    }
};

// 自定义相等比较函数
struct VectorEqual {
    bool operator()(const std::vector<int>& v1,
                    const std::vector<int>& v2) const {
        return v1 == v2;
    }
};
class Solution {
public:
    vector<vector<int>> res;
    bool check[10] = {false};
    vector<int> path;
    std::unordered_map<std::vector<int>, int, VectorHash, VectorEqual> check2;
    vector<vector<int>> permuteUnique(vector<int>& nums) {
        dfs(nums);
        return res;
    }
    void dfs(vector<int>& nums) {
        if (path.size() == nums.size()) {
            // auto it = find(res.begin(), res.end(), path);
            // if (it == res.end())
            //     res.push_back(path);
            if (check2.count(path) == 0) {
                res.push_back(path);
                check2[path]++;
            }
            return;
        }
        for (int i = 0; i < nums.size(); ++i) {
            if (!check[i]) {
                path.push_back(nums[i]);
                check[i] = true;
                dfs(nums);
                // recovery
                path.pop_back();
                check[i] = false;
            }
        }
    }
};
// 自定义的哈希函数以及比较函数一定要放在soloution类的前面,或者静态成员

以上两种代码的本质没有任何区别,在算法角度来说,没有进行剪枝处理,所以运行时间较长。

解法二:进行剪枝操作
在这里插入图片描述

class Solution {
public:
    vector<vector<int>> res;
    vector<int> path;
    bool checkpos[9] = {false};
    int n = 0;
    vector<vector<int>> permuteUnique(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        n = nums.size();
        dfs(nums, 0);
        return res;
    }
    void dfs(vector<int>& nums, int pos) {
        if (pos >= n) {
            res.push_back(path);
            return;
        }

        for (int i = 0; i < n; ++i) {
            if (checkpos[i] == false && (i == 0 || nums[i] != nums[i-1] || checkpos[i-1] == true)) {
                path.push_back(nums[i]);
                checkpos[i] = true;
                dfs(nums, pos + 1);
                // recovery
                path.pop_back();
                checkpos[i] = false;
            }
        }
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2075314.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大模型分布式训练技术(DP、DDP和FSDP)

目录 数据并行&#xff08;PyTorch DP&#xff09; 分布式数据并行&#xff08;PyTorch DDP&#xff09; DP 与 DDP 的区别 补充说明&#xff1a;DP与DDP数据传输过程 完全分片数据并行(PyTorch FSDP) 补充说明&#xff1a;ZeRO FSDP DDP 与 FSDP 的区别 DP、DDP和FSD…

ADW400环保监测模块,用于各省市环保平台对接

ADW400环保监测模块主要用于计量低压网络的三相有功电能&#xff0c;同时可选择四个回路的电流输入&#xff0c;具有RS485通讯和470MHz无线通讯功能&#xff0c;方便用户进行用电监测、集抄和管理。可灵活安装于配电箱内&#xff0c;实现对不同区域和不同负荷的分项电能计量&am…

构建智慧园区的全方位解决方案:技术、部署与挑战应对

在当今数字化转型的浪潮中,智慧园区作为城市智能化的重要组成部分,正在成为各地政府和企业关注的焦点。本文将围绕一套完整的智慧园区解决方案,详细阐述其技术架构、部署流程以及在实施过程中可能遇到的挑战及应对策略。 1. 智慧园区解决方案概述 智慧园区解决方案旨在通过先…

Qt 一个带数据压缩的加解密实现类,压缩率达到了1/3

一.加解密效果 1-1000字符串,所占大小2890(加密前) 1-1000字符串,所占大小1964(加密后) 二.加解密功能实现类 /* Copyright (c) 2011, Andre Somers All rights reserved.Redistribution and use in…

Windows上安装 nodejs,npm 和 yarn详细教程

1、下载Node.js 访问Node.js 官网下载&#xff0c;下载需要版本版本&#xff0c;具体操作如下 2、安装Node.js 具体安装可参考以下知乎教程 https://www.zhihu.com/question/591831850/answer/3423661990 3、配置淘宝镜像 npm config set registry https://registry.npmmirror…

Codeforces Round 925 (Div. 3) E. Anna and the Valentine‘s Day Gift (博弈论*1400)

根据题目条件&#xff0c;我们知道10的m次方就是1后面跟着m个0&#xff0c;也就是说这是个最小的m1位数。 那么只要是最终得来的数的尾数是m1位数就可以通过。 思考影响数位的因素&#xff1f; 在这道题里&#xff0c;安娜能够对数位进行的操作只有删去后导零&#xff0c;由此…

安卓刷机笔记

前置知识 双清— 清除data 、 cache 四清----清除 data 、 cache 、 dalvik分区 、 system分区 四清的好处&#xff1a;卡刷ZIP格式的刷机包都是使用第三方recovery刷入的&#xff0c;所以我们在刷机之前对上一个系统的数据&#xff0c;包括用户数据、系统残留都需要彻底清除&a…

dolphinscheduler 日志乱码

dolphinscheduler 日志乱码如下图所示&#xff0c;检查服务器编码为zh_CN.UTF-8 修改$dolphinscheduler/bin/env/dolphinscheduler_env.sh 增加 JAVA_OPTS"$JAVA_OPTS -Dfile.encodingUTF-8" 参数 重新安装启动 修改前 修改后

i.MX裸机开发(10):UART——串口通讯

本章参考资料&#xff1a;《IMX6ULRM》&#xff08;参考手册&#xff09;。 学习本章时&#xff0c;配合《IMX6ULRM》Chapter 53 Universal Asynchronous Receiver/Transmitter (UART)一起阅读&#xff0c;效果会更佳&#xff0c;特别是涉及到寄存器说明的部分。 本章主要内容…

一文读懂 LLM 如何进行微调?

​你知道吗&#xff0c;咱们用那些已经训练好的大型语言模型&#xff0c;其实有好多不同的玩法。最常见的有三种&#xff1a;一种是用模型提取的特征来训练新的小模型&#xff1b;另一种是直接给模型看新任务的例子&#xff0c;让它学着怎么回答&#xff0c;这招叫做提示&#…

深度探究|软件主宰世界,我们究竟错过了什么?

这乃是知乎 COO 张宁于近期针对国内过往十年创投环境展开的深度思索。 张宁觉得&#xff0c;在过去的十年当中&#xff0c;美国硅谷专注于 SaaS 领域&#xff0c;凭借软件的标准化来提升企业的效率与经济性&#xff0c;同时倡导开放性与多样性。 中国在过去的十年里&#xff…

Java之线程篇二

目录 Thread的常见构造方法 Thread的常见属性 代码示例1 代码示例2 示例代码3 代码示例4 代码示例5 小结 线程中断 代码示例1 代码示例2 代码示例3 代码示例4 小结 线程等待 获取当前线程的引用 Thread的常见构造方法 举例 Thread t1 new Thread(); Thread t2…

YOLOv8改进 | 融合改进 | C2f融合Faster模块提升检测速度【完整代码 + 主要代码解析】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a;《YOLOv8改进有效…

conda环境安装与删除

安装 1.cmd安装 conda create -n xxxxx(名字) python3.8 进入虚拟环境 activate xxxxx(名字) 查看虚拟环境的库 pip list 退出虚拟环境 deactivate 2.pycharm直接创建 对一个项目右下角&#xff1a; 可以使用现有环境&#xff0c;也可以创建新环境 删除 在cmd中输入&…

大模型在安全领域的十大应用场景及实现路径

作为网络安全及AI的双重爱好者&#xff0c;笔者也一直在关注大模型在安全领域的相关应用&#xff0c;从目前市面上看到的产品来说&#xff0c;相关的结合还在一个较为早期的阶段&#xff0c;很多产品能力也是为了大模型而大模型&#xff0c;并未真正发挥其价值。 在去年上一篇相…

lvgl 滚轮roller 选项循环设置

lvgl 中可以通过设置滚轮的属性使所有选项循环出现&#xff0c;对于时间、日期之类的组件非常实用。 lv_roller_set_options(lv_obj_t * obj, const char * options, lv_roller_mode_t mode)&#xff1b; 这个函数的最后一个参数有两个值&#xff1a; LV_ROLLER_MODE_NORMAL…

大模型面经——Langchain总结

本篇介绍Langchain相关面试题。 本次将会分为上下两个部分&#xff0c;本篇章将会介绍前三个问题&#xff0c;下一次在将后三个问题补充完毕。 以下是一个快捷目录&#xff1a; 什么是 LangChain? LangChain 包含哪些部分&#xff1f; LangChain 中 Chat Message History …

49、Python之模块和包:模块导入对命名空间的影响

引言 前面文章中&#xff0c;关于Python解释器在模块导入行为背后所执行的操作&#xff0c;已经做了深入的介绍。本文打算在此基础上&#xff0c;结合实际代码案例&#xff0c;进行进一步的补充说明。同时&#xff0c;比较看似只是微小的导入方式的改变&#xff0c;可能会导致…

「ComfyUI」生图修图神器,自定义调节颜色光暗,更生动更强对比度生图技巧分享!

前言 ‍‍‍‍‍前 言 今天再给小伙伴们分享一个简单又实用生图神器插件&#xff0c;可以调整整个图像的光暗变化以及颜色变化。 原理的话&#xff0c;我们也简单来说下&#xff0c;我们在使用 VAE 将图像编码为潜在噪声时&#xff0c;VAE 解码的值通常在一定范围内&#xf…

在Mac上打开UE4Editor

编译MacEditor 使用如下命令在Mac机器上编译Mac的UE4Editor&#xff1a; ${EnginePath}/Engine/Build/BatchFiles/Mac/Build.sh ${ProjectName}Editor Mac Development ${ProjectPath} -buildubt -buildscw -waitmutex -log${ClientPath}/Saved/Logs/${ProjectName}Editor.log…