【剑指offer|图解|位运算】训练计划VI+撞色搭配

在这里插入图片描述
🌈个人主页:聆风吟
🔥系列专栏:数据结构、剑指offer每日一练
🔖少年有梦不应止于心动,更要付诸行动。


文章目录

  • 一. ⛳️训练计划VI(题目难度:中等)
    • 1.1 题目
    • 1.2 示例
    • 1.3 限制
    • 1.4 解题思路
    • 1.5 c++代码
  • 二. ⛳️撞色搭配(题目难度:中等)
    • 2.1 题目
    • 2.2 示例
    • 2.3 限制
    • 2.4 解题思路
    • 2.5 c++代码
  • 📝全文总结

一. ⛳️训练计划VI(题目难度:中等)

⌈ 在线OJ链接,可以转至此处自行练习 ⌋

1.1 题目

教学过程中,教练示范一次,学员跟做三次。该过程被混乱剪辑后,记录于数组 actions,其中 actions[i] 表示做出该动作的人员编号。请返回教练的编号。

1.2 示例

输入: actions = [5, 7, 5, 5]
输出: 7

1.3 限制

  • 1 <= actions.length <= 10000
  • 1 <= actions[i] < 2^31

1.4 解题思路

  1. 📗使用 与运算 我们可以获取数字num二进制位的最右边的一位。
    在这里插入图片描述
  2. 📕配合 右移操作 ,我们可以从低位到高位依次获取num的每一位二进制的值。
  3. 📘建立一个长度位32的数组,使用上面方法存放所有数字各二进制 1 出现的次数之和。
    在这里插入图片描述
  4. 📙将 count 各元素对 3 求余,则结果为 “只出现一次的数字” 的各二进制位。
    在这里插入图片描述

  5. 📓利用 左移或运算,可将数组中的二进制位恢复到数字ret上,然后返回ret即可。
    在这里插入图片描述

1.5 c++代码

class Solution {
public:
    int trainingPlan(vector<int>& actions) {
        int count[32] = { 0 };//用来记录所有数字各二进制 1 出现的次数之和

        //开始统计所有数字各二进制 1 出现的次数之和
        for(int i = 0; i < actions.size(); i++){
            for(int j = 0; j < 32; j++){
                count[j] += (actions[i] >> j) & 1;
            }
        }

        int ret = 0;//记录只出现一次的数字
        int m = 3;
        //将数组中的二进制位恢复到数字ret上
        for(int i = 31; i >= 0; i--){
            ret <<= 1;
            ret |= count[i] % m;
        }

        return ret;
    }
};


二. ⛳️撞色搭配(题目难度:中等)

⌈ 在线OJ链接,可以转至此处自行练习 ⌋

2.1 题目

整数数组 sockets 记录了一个袜子礼盒的颜色分布情况,其中 sockets[i] 表示该袜子的颜色编号。礼盒中除了一款撞色搭配的袜子,每种颜色的袜子均有两只。请设计一个程序,在时间复杂度 O(n),空间复杂度O(1) 内找到这双撞色搭配袜子的两个颜色编号。

2.2 示例

输入: sockets = [4, 5, 2, 4, 6, 6]
输出: [2,5] 或 [5,2]

2.3 限制

  • 2 <= sockets.length <= 10000

2.4 解题思路

拓展知识: 异或运算有个重要的性质,就是两个相同的值异或结果为0,即对任意整数 a 有 a ⊕ a = 0。并且异或运算满足交换律 a ⊕ b = b ⊕ a。

  1. 📗首先让sockets中的所有元素进行异或,并将结果赋给sum。
    在这里插入图片描述

  2. 📕根据异或运算定义,若整数 x⊕y 某位二进制位为 1 ,则 x 和 y 的此二进制位一定不同。
    在这里插入图片描述

  3. 📘因此,我们可以通过与运算从右向左循环判断,获取整数 x⊕y 首位为 1 的位置 ,将其记录于 m 中。
    在这里插入图片描述

  4. 📙将数组sockets中所有元素二进制均右移m位,并&1判断数字是否相同,即可将数组 sockets 拆分为分别包含 52 的两个子数组,分别对两个子数组进行异或即可得出结果。
    在这里插入图片描述

2.5 c++代码

class Solution {
public:
    vector<int> sockCollocation(vector<int>& sockets) {
        
        int sum = 0;//sockets中的所有元素进行异或,并将结果赋给sum
        for(int i = 0; i < sockets.size(); i++){
            sum ^= sockets[i];
        }

        int pos = 0;//记录sum二进制位最右边一个 1 的位数
        for(int i = 0; i < 32; i++){
            if((sum>>i) & 1){
                pos = i;
                break;
            }
        }

		//将拆分子数组,让子数组进行异或,求出说需要的值。
        int x = 0;
        int y = 0;
        for(int i = 0; i < sockets.size(); i++){
            if((sockets[i] >> pos) & 1)
                x ^= sockets[i];
            else
                y ^= sockets[i];
        }

        return {x, y};
    }
};


📝全文总结

本文主要讲解:

     今天的干货分享到这里就结束啦!如果觉得文章还可以的话,希望能给个三连支持一下,聆风吟的主页还有很多有趣的文章,欢迎小伙伴们前去点评,您的支持就是作者前进的最大动力!
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

会声会影2024购买多少钱 会声会影在哪里购买

掌握视频编辑技术&#xff0c;能为我们的工作和生活带来很多帮助。例如&#xff1a;将我们精心编辑的视频&#xff0c;上传到抖音、快手等平台进行变现&#xff1b;通过天马行空的视频创意&#xff0c;摇身一变成为B站up主。因此&#xff0c;拥有一款像会声会影这样的视频编辑软…

相关基础知识

本文引注&#xff1a; https://zhuanlan.zhihu.com/p/447221519 1.方差 2.自协方差矩阵 3.自相关矩阵 4.互协方差矩阵 5.互相关矩阵 6.相关系数 7.自相关函数、自协方差函数与功率谱密度 8.互相关函数、互协方差函数与互功率谱密度

怎么使用AI写作工具批量写作?批量AI智能写作的方法

随着科技的不断发展&#xff0c;人工智能&#xff08;AI&#xff09;技术在各个领域都有了广泛的应用&#xff0c;其中之一就是智能写作。对于需要大量文本创作的用户来说&#xff0c;批量AI智能写作成为提高效率的一项重要工具。本文将专心分享批量AI智能写作的方法、工具以及…

算法--最短路

这里写目录标题 xmind单源最短路简介所有边权都是正朴素的Dijkstra算法思想例子题解 堆优化版的Dijkstra算法 存在负数权Bellman-Ford算法思想例子题解 多源汇最短路简介 xmind 上述中&#xff0c;朴素Dijkstra算法适用于稠密图 其他用堆优化版 而SPFA算法一般都比Bellman-For…

Cannot resolve symbol ‘ActivityResultLauncher‘ 报错处理方法

修改 app/build.gradle implementation ‘androidx.appcompat:appcompat:1.2.0’ 为 implementation ‘androidx.appcompat:appcompat:1.4.0’

性能工具之JMeter二次开发总结

文章目录 一、前言二、自定义脚本三、自定义请求编写&#xff08;Java Sampler&#xff09;四、自定义函数五、小结 一、前言 掌握 JMeter 的脚本编写和执行&#xff0c;这基本已满足大部分的性能测试需求&#xff0c;但是面对各种各样的项目技术方案&#xff0c;有些需求是需…

缺少代码签名证书会怎么样?

在当下恶意软件攻击频发的情形下&#xff0c;使用代码签名证书来保护代码安全已经成为每个软件开发商的基本认知。代码签名证书将保护软件代码的完整性&#xff0c;避免软件被非法篡改或植入恶意代码病毒&#xff0c;从而使得软件可以正常运行。那么如果软件缺少代码签名证书会…

基于springboot + vue大学生竞赛管理系统

qq&#xff08;2829419543&#xff09;获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;springboot 前端&#xff1a;采用vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xf…

利用ElementUI配置商品的规格参数

需求&#xff1a;商品可以设置多个规格&#xff0c;需要自动生成对应规格的所有组合&#xff0c;并设置该规格商品的图片、价格、库存等数据。 <template><div class"sku-list"><template v-if"!disabled"><div class"sku-list-…

UDP数据报套接字

文章目录 DatagramSocket APIDatagramPacket API示例一: 请求响应UDP服务端UDP客户端 DatagramSocket API Socket是操作系统中的一个概念&#xff0c;本质上是一种特殊的文件&#xff0c;Socket就属于把“网卡”这个设备给抽象成了文件。往 Socket 文件中写数据&#xff0c;就…

外包干了2个月,技术倒退2年。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;20年通过校招进入深圳某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年国庆&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

maven环境搭建

maven历史版本下载&#xff1a;https://archive.apache.org/dist/maven/ 新建系统变量编辑Path&#xff0c;添加bin目录mvn -v测试查看版本号conf目录下新建repository文件夹&#xff0c;作为本地仓库 settings.xml <?xml version"1.0" encoding"UTF-8&q…

JAVAEE初阶相关内容第十八弹--网络原理之TCP_IP【续集】

写在前 上一篇博客的重点内容主要讲了关于传输层的TCP协议、UDP协议。 点击跳转上一篇博客 重点介绍了协议的特点、协议端格式、需要重点理解并掌握TCP的工作机制&#xff08;十条&#xff09;。 TCP与UDP对比&#xff1f; TCP用于可靠传输的情况&#xff0c;应用于文件传输&am…

【优选算法】202.快乐数

一&#xff0c;题目解析 图形结合&#xff1a; 二&#xff0c;算法原理 快慢双指针 1&#xff0c;定义快慢指针 2&#xff0c;慢指针每次移动一步&#xff0c;快指针一次移动两步 3&#xff0c;判断相遇时的值为1即为快乐数 三&#xff0c;编写代码 class Solution {publ…

Leetcode.2477 到达首都的最少油耗

题目链接 Leetcode.2477 到达首都的最少油耗 rating : 2012 题目描述 给你一棵 n n n 个节点的树&#xff08;一个无向、连通、无环图&#xff09;&#xff0c;每个节点表示一个城市&#xff0c;编号从 0 0 0 到 n − 1 n - 1 n−1 &#xff0c;且恰好有 n − 1 n - 1 n−…

微信小程序pc端样式调试:默认宽高为1024*812,全屏宽高为1920*1032

最近开发调试pc端小程序&#xff0c;想知道默认打开和全屏这两种情况下的小程序宽高&#xff0c;发现了一种方法&#xff1a; 真机运行pc端小程序&#xff0c;点击devTools 在控制台直接打印window对象&#xff0c;可以获取到pc端默认屏幕宽高为1024812&#xff0c;全屏pc端小…

【实用+干货】如何使用Clickhouse搭建百亿级用户画像平台看这一篇就够了

背景 如果你是用户&#xff0c;当你使用抖音、小红书的时候&#xff0c;假如平台能根据你的属性、偏好、行为推荐给你感兴趣的内容&#xff0c;那就能够为你节省大量获取内容的时间。 如果你是商家&#xff0c;当你要进行广告投放的时候&#xff0c;假如平台推送的用户都是你潜…

【无标题】什么是UL9540测试,UL9540:2023版本增加哪些测试项目

什么是UL9540测试&#xff0c;UL9540:2023版本增加哪些测试项目 UL 9540是美国安全实验室&#xff08;Underwriters Laboratories&#xff09;发布的标准&#xff0c;名称为"UL 9540: Energy Storage Systems and Equipment"&#xff0c;翻译为中文为"能量存储…

Vue Computed

小满&#xff0c;我的神&#xff01; 视频链接 // 只读 const plusOne computed(() > count.value 1) // 可读可写 const plusOne computed({get: () > count.value 1,set: (val) > {count.value val - 1} }, { // 用于调试onTrack(e) {debugger},onTrigger(e) …

坚鹏:中国工商银行内蒙古分行数字化转型发展现状与成功案例培训

中国工商银行围绕“数字生态、数字资产、数字技术、数字基建、数字基因”五维布局&#xff0c;深入推进数字化转型&#xff0c;加快形成体系化、生态化实施路径&#xff0c;促进科技与业务加速融合&#xff0c;以“数字工行”建设推动“GBC”&#xff08;政务、企业、个人&…