leetcode“位运算”——只出现一次的数字

只出现一次的数字i: 

https://leetcode.cn/problems/single-number/

给你一个非空整数数组 nums,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现一次的元素。 

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int j=0;
        for(auto i:nums)
        {
            j^=i;
        }
        return j;

    }
};

 这道题其实告诉你有两个重复出现的数,就在提示你用异或了,用0依次与其他数异或,最后出现两次的都被消掉了,最后剩下的数就是只出现一次的数。

只出现一次的数字 ii:

https://leetcode.cn/problems/single-number-ii/

 给你一个整数数组 nums,除某个元素仅出现 一次外,其余每个元素都恰出现 三次。请你找出并
返回那个只出现了一次的元素。

 第一部分:因为每个数是32位,我们把每个数的每一位分别放进一个数组,去统计每一位所有出现1的次数。1<<i 的意思是为了探测每一位的1出现的次数。将那个值与(1<<i)进行“与”运算,只要那一位是1,条件为真,将代表这一位的个数的数组进行加1。反复遍历,直到所有都遍历完为止。

第二部分:看每一位是否是3*N+1还是3*N+1,因为3*N+1代表那个要找的数这一位是1,3*N代表0,然后我们再定义一个变量num=0,如果是3*N+1,则将num与(1<<i)进行“或”运算,知道遍历完所有的,num就是我们要找的数了。

记住探测某1位是0还是1,用“与”运算。使某1位变成1,用“或”运算。

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int v[32] = {0};
        for (auto val : nums) {
            for (int i = 0; i < 32; i++) {
                if (val & (1 << i)) {
                    v[i]++;
                }
            }
        }
        int num = 0;
        for (int i = 0; i < 32; i++) {
            if (v[i] % 3 == 1) {
                num |= (1 << i);
            }
        }
        return num;
    }
    
};

 只出现一次的数字iii:

 https://leetcode.cn/problems/single-number-iii/

 给你一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案

首先,定义一个变量val=0,然后将nums的所有的数与val,依次“异或”运算,因为出现两次的数在异或的过程中,都被消除了。所以val的值是唯一出现一次的两个数相互异或的结果。

那么val(相互异或的结果),对这道题目起了什么作用呢?

我们可以把val的32位,一位一位分析,“异或”的原理是——相同为0,相异为1。所以我们接下来就要把val的值一位一位来看,从第0位开始看,依次寻找第一次出现1的位是在哪,1代表两个值相异。

第二步,是为了找到第一个为“1”的位的位置。

第三步:我们正好可以将第二步找到的位置,与(1<<i)进行“与”运算,将这个的结果作为分类的条件,然后分成两类,依次遍历nums的每一个元素,如果 e & (1<<i) 的结果为非0,那么就与第一类的数依次“异或”运算,否则与第二类“异或”运算。因为重复出现的会被消掉,所以num1 和num2 就是我们要找的两个只出现一次的数。

第四步,将这两个插入新定义的vector v中,然后返回 v 即可。

class Solution {
public:
    vector<int> singleNumber(vector<int>& nums) {
       //第一步:
        int val=0;
        for(auto e:nums)
        {
            val^=e;
        }
       //第二步:
        size_t i=0;
        for(i=0;i<32;i++)
        {
            if(val & (1<<i))
            {
                break;
            }
        }
       //第三步:
        int num1=0,num2=0;
        for(auto e:nums)
        {
            if(e & (1<<i))
            {
                num1^=e;
            }
            else
            {
                num2^=e;
            }
        }
        //第四步:
        vector<int> v;
        v.push_back(num1);
        v.push_back(num2);
        return v;
    }
};

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

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

相关文章

flink table view datastream互转

case class outer(f1:String,f2:Inner) case class outerV1(f1:String,f2:Inner,f3:Int) case class Inner(f3:String,f4:Int) 测试代码 package com.yy.table.convertimport org.apache.flink.streaming.api.scala.StreamExecutionEnvironment import org.apache.flink.tabl…

强化学习的数学原理学习笔记 - 基于模型(Model-based)

文章目录 概览&#xff1a;RL方法分类基于模型&#xff08;Model-Based&#xff09;值迭代&#xff08;Value Iteration&#xff09;&#x1f7e6;策略迭代&#xff08;Policy Iteration&#xff09;&#x1f7e1;截断策略迭代&#xff08;Truncated Policy Iteration&#xff…

从新手到大师:四大编程范式解锁你的编码力!

编程&#xff0c;就是用代码跟计算机交流&#xff0c;告诉它我们想要它做什么。不同的编程范式就是不同的交流方式&#xff0c;每种方式都有自己独特的语法和规则。 今天&#xff0c;我们就来聊聊这四种主要的编程范式&#xff0c;它们分别是命令式、函数式、面向对象和声明式…

cube生成电机库,启用了RTOS,编译报错[0xc43ed8:5050106] in osSignalWait

cube生成电机库&#xff0c;启用了RTOS&#xff0c;编译报错[0xc43ed8:5050106&#xff0c;解决办法] in osSignalWait 1.现象 编译报错[0xc43ed8:5050106] in osSignalWait 导致链接失败 2.解决办法 将keil5的版本升级到5.18.00&#xff0c;我的版本也是5.14.00。

2024阿里云优惠活动有哪些?

2024年阿里云优惠活动大全&#xff0c;包括阿里云服务器优惠活动清单、配置价格表、域名优惠活动、阿里云建站活动、阿里云优惠代金券免费领取、对象存储OSS活动、企业邮箱优惠、无影云电脑优惠、CDN特惠等等&#xff0c;阿里云百科aliyunbaike.com分享2024阿里云优惠活动大全_…

Vue实现加减法验证码

引入Vue.js 在HTML文件的<head>标签中引入Vue.js的CDN链接&#xff1a; <script src"https://cdn.jsdelivr.net/npm/vue2.6.11/dist/vue.min.js"></script>创建Vue实例 接下来&#xff0c;我们要创建一个Vue实例&#xff0c;并将其挂载到HTML文…

用可视化案例讲Rust编程1. 怎么能学会Rust

用可视化案例讲Rust编程 1. 怎么能学会Rust 如果要列举Rust的优势&#xff0c;恐怕写个十条八条是写不完的&#xff0c;而且不管写哪条优势&#xff0c;都有很多同学跳起来反驳&#xff0c;比如我们说Rust比C/C内存安全&#xff0c;肯定有同学说C 20也支持内存安全&#xff0…

使用metricbeat 监控多ES集群

背景 ES 本身自带 监控&#xff0c;属于xpack 中的内容&#xff0c;为商业版&#xff0c;需要收费&#xff1b; 并且 monitor 功能必须要在security开启后才能使用&#xff0c;还有就是集群监控自己&#xff0c;将采集到的性能数据保存到本集群&#xff0c;这是一个比较差的设…

全网最全postman接口测试教程和项目实战~从入门到精通!!!

Postman实现接口测试内容大纲一览&#xff1a; 一、什么是接口&#xff1f;为什么需要接口&#xff1f; 接口指的是实体或者软件提供给外界的一种服务。 因为接口能使我们的实体或者软件的内部数据能够被外部进行修改。从而使得内部和外部实现数据交互。所以需要接口。 比如&…

05 Ciso模拟器连接腾讯云物联网开发平台

Ciso声明&#xff1a;本篇文章基于使用腾讯云物联网平台连接自定义esp8266物联网设备(腾讯连连控制开关实现) - CSDN App改编 一、总体概览 功能描述&#xff1a; 使用腾讯连连小程序进行控制&#xff0c; Alarm&#xff08;警铃&#xff09;&#xff1a;开的时候&#xff…

python编程从入门到实践(3+4)操作列表+if语句

文章目录 第四章 列表操作4.1遍历整个列表&#xff1a;可能会发生变化的数值&#xff0c;列表可修改4.1.2遍历中的缩进 4.3创建数值列表4.3.1 使用range&#xff08;&#xff09;函数range&#xff08;i&#xff0c;m&#xff09;输出从i到m-1range(m) 打印从0到m-1 4.3.1 使用…

UVa12419 Heap Manager

题目链接 UVa12419 - Heap Manager 题意 内存以内存单元为基本单位&#xff0c;每个内存单元用一个固定的整数作为标识&#xff0c;称为地址。地址从0开始连续排列&#xff0c;地址相邻的内存单元被认为是逻辑上连续的。我们把从地址i开始的s个连续的内存单元称为首地址为i长度…

【Maven笔记3】Maven基础入门案例

本篇通过一个最基础的入门案例&#xff0c;熟悉一下maven最基础的使用方法。 编写POM maven项目的核心是pom.xml文件&#xff0c;pom定义了项目的基本信息&#xff0c;用于描述项目如何构建&#xff0c;声明项目依赖等等。 这里我们新建一个maven-demo-hello项目&#xff0c;…

thinkphp学习03-url访问模式

多应用&#xff1a;http://serverName/index.php/应用/控制器/操作/参数/值…&#xff1b;单应用&#xff1a;http://serverName/index.php/控制器/操作/参数/值…&#xff1b; http://localhost:8506/index.php Contoller下新建Test.php <?php namespace app\controlle…

Linux第14步_安装FTP服务器

安装“vim编辑器”后&#xff0c;我们紧接着“安装FTP服务器”。 1、在安装前&#xff0c;要检查虚拟机可以上网&#xff0c;否则可能会导致安装失败。 2、在虚拟机界面右击鼠标&#xff0c;弹出下面的对话框 3、点击“打开终端(E)”&#xff0c;得到下面的界面 &#xff1a;…

软件测试|Linux下Python安装配置指南

在Linux中安装Python是一个简单而且重要的过程&#xff0c;因为Python是一种广泛使用的编程语言&#xff0c;许多系统工具和应用都依赖于它。在本文中&#xff0c;我将详细介绍如何在Linux系统中安装Python。 请注意&#xff0c;在本文中&#xff0c;我将以Centos为例&#xf…

Spring mvc WebDataBinder数据绑定器

前言 DataBinder 是数据绑定器&#xff0c;它的作用是把一组属性值绑定到目标对象上&#xff0c;参数绑定的方式一般是通过 Java 反射。WebDataBinder 顾名思义&#xff0c;它是专门在 Web 环境使用的数据绑定器。 “数据绑定”对于框架而言是一项基础能力&#xff0c;很多地方…

裁员+失恋或许不能比这更遭了,敬一塌糊涂与充满感动的2023,也敬曾经的挚爱与寒冬的冰霜

~ 随机抽取评论区的 3位 小伙伴送上精美礼品 ~ 参与方式&#xff1a;关注、点赞、收藏&#xff0c;评论 "2024&#xff0c;一天当做两天卷&#xff01;" 活动时间&#xff1a;截止到 2024-01-21 00:00:00 礼品清单&#xff1a;CSDN活动周边、自选图书 本文目录 序 …

Java---网络编程

文章目录 1. 网络编程概述2. InetAddress3. 端口和协议4. Java网络API5. URL6. URLConnection类 1. 网络编程概述 1. 计算机网络&#xff1a;是指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络操作系统、网络管理软…

Unity 0GC或者最大限度降低GC方案

文章目录 GC带来的问题性能瓶颈玩家体验受损 优化关键点1. **对象池技术**&#xff1a;2. **内存管理优化**&#xff1a;3. **UGUI优化**&#xff1a;4. **ECS架构下的优化**&#xff1a;5. **资源管理**&#xff1a;6. **自定义数据结构与算法**&#xff1a;7. **开启增量GC&a…