位运算+leetcode ( 2 )

题一:只出现一次的数字(1)

1.链接

136. 只出现一次的数字 - 力扣(LeetCode)

2.思想

  • 借用位运算中异或操作符的特点,a^a=0,0^a=a
  • 先定义一个sum=0
  • 就用一个循环来遍历这个数组,每次都进行 sum ^ = nums[i]
  • 当循环结束,那么此刻sum里就是正确答案

3.代码 

class Solution {
public:int singleNumber(vector<int>& nums) {int result=nums[0];for(int i=0;i<nums.size()-1;i++){result=result^nums[i+1];}return result;}
};

题二:丢失的数字

1.链接

268. 丢失的数字 - 力扣(LeetCode)

2.思路

  • 借用位运算中异或操作符的特点,a^a=0,0^a=a
  • 先定义一个变量sum,并初始化为0
  • 然后在利用一个for循环来处理,每次循环都进行 sum^=i 的操作
  • 在去遍历整个数组,遍历时,进行sum^=nums[i]的操作
  • 最终sum就是要找的那个值

3.代码

class Solution {
public:int missingNumber(vector<int>& nums) {int sum=0;for(int i=1;i<=nums.size();i++){sum^=i;}for(int i=0;i<nums.size();i++){sum^=nums[i];}return sum;}
};

题三:只出现一次的数字 (2)

1.链接

137. 只出现一次的数字 II - 力扣(LeetCode)

2.思路

位图的思想

前提:我们让出现一次的数为:a,出现三次的数统称为b;

  • 由于数据的特殊性,我们可以统计这些数据用二进制表示时,每个位数出现一的个数
  • 判断,该位数是出现1的个数。a 的二进制在该位数时的结果是0或1,而的二进制在该位数时的结果:3的倍数或者0
  • 则统计各个位数出现1的结果则可能是:0+3的倍数,1+3的倍数,0+0,0+1
  • 此时,我们可以对其进行%3的操作,结果等于1,那么则就代表a在这个位是1
  • %3的操作,结果等于1,那么则就将数字在该位修改为1

由于数据范围是:- 2 的31次方——2 的 31 次 方 - 1,那么数据类型为int,就可以进行位图思想

3.代码

class Solution {
public:int singleNumber(vector<int>& nums) {int ret = 0;for (int i = 0; i < 32; i++) {int sum = 0;for (auto x : nums)if (((x >> i) & 1) == 1)sum++;sum = sum % 3;if (sum == 1)ret |= (1 << i);}return ret;}
};

题四:只出现一次的数字 (3)

1.链接

260. 只出现一次的数字 III - 力扣(LeetCode)

2.思路

先定义一个int类型的变量 sum ,并初始化为0

  • 先遍历这个数组,并进行 sum ^ =  nums[ i ]的操作
  • 完成遍历操作后,得到的其实就是:二个只出现一次的数,进行异或的结果(sum)
  • 考虑异或的性质,相同为0,相异为1,sum的二进制表示中从左往右出现的第一个1,就是二个只出现一次的数 的二进制表示形式 的第一个不同处
  • 我们可以进行 sum & (-sum)的操作,这样就得到了从左往右出现的第一个1( rs ),并且其它位全为0
  • 然后对数据进行分组处理,按照nums [ i ] & rs 等于0 和 不等于0 进行处理
  • 当不等于0时,对数据进行 tmp ^ = nums[ i ]的操作,最终  tmp就是二个只出现一次的数的其中之一
  • 然后再将 sum ^ tmp , 就得到了另外一个数

3.代码

class Solution {
public:vector<int> singleNumber(vector<int>& nums) {long long sum = 0;for (int j = 0; j < nums.size(); j++) {sum ^= nums[j];}long long rs = sum & (-sum);int tmp = 0;for (int j = 0; j < nums.size(); j++) {if (nums[j] & rs)tmp ^= nums[j];}int b=sum^ tmp;return {tmp, b};}
};

 题五:消失的两个数字(消失的数字的综合题)

 1.链接

面试题 17.19. 消失的两个数字 - 力扣(LeetCode)

 2.思路

总体思路是:

  • 这个问题可以转化为题四,这里其实就是一组数据,其中只有二个数据只出现一次,其它都出现二次
  • 那么就可以,找到只出现一次的二个数据再二进制表示时,第一个不同的位置
  • 然后根据这个为依据,进行分组处理(处理的思路,就是题1)

 3.代码

class Solution {
public:vector<int> missingTwo(vector<int>& nums) {int n = nums.size();int ret = 0;for (int i = 1; i <= n + 2; i++) {ret ^= i;}int sum = 0;for (int i = 0; i < n; i++) {sum ^= nums[i];}int rsum = ret ^ sum;int rs = rsum & (-rsum);int tmp = 0, rtmp = 0;for (int i = 0; i < n; i++) {if (nums[i] & rs)tmp ^= nums[i];else {rtmp ^= nums[i];}}for (int i = 0; i <= n + 2; i++) {if (i & rs)tmp ^= i;elsertmp ^= i;}return {rtmp, tmp};}
};

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于JAVA的CRM客户管理系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统设计3.1 用例设计3.2 E-R 图设计3.3 数据库设计3.3.1 客户表3.3.2 商品表3.3.3 客户跟踪表3.3.4 客户消费表3.3.5 系统角色表 四、系统展示五、核心代码5.1 查询客户5.2 新增客户跟踪记录5.3 新增客户消费订单5.4 查…

HandlerMapping之RequestMappingHandlerMapping作用详解

前言RequestMappingHandlerMapping RequestMappingRequestMapping的注册总结 前言 上回我们知道HandlerMapping是用来寻找Handler的&#xff0c;并不与Handler的类型或者实现绑定&#xff0c;而是根据需要定义的。 那么为什么要单独给RequestMapping实现一个HandlerMapping&…

《UE5_C++多人TPS完整教程》学习笔记12 ——《P13 加入游戏会话(Joining The Sessions)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P13 加入游戏会话&#xff08;Joining The Session&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&#xff08;也是…

操作系统基础:IO管理概述【上】

&#x1f308;个人主页&#xff1a;godspeed_lucip &#x1f525; 系列专栏&#xff1a;OS从基础到进阶 &#x1f3c6;&#x1f3c6;本文完整PDF源文件请翻阅至文章底部下载。&#x1f3c6;&#x1f3c6; &#x1f3ae;1 I/O设备的基本概念与分类&#x1f52b;1.1 总览&#x…

最新Burp Suite入门讲解

Burp Suite的安装 Burp Suite是一款集成化的渗透测试工具&#xff0c;包含了很多功能&#xff0c;可以帮助我们高效地完成对Web应用程序的渗透测试和安全检测。 Burp Suite由Java语言编写&#xff0c;Java自身的跨平台性使我们能更方便地学习和使用这款软件。不像其他自动化测…

HTML 超文本标记语言

超文本标记语言 HTML 在一个客户程序主窗口上显示出的万维网文档称为页面 (page)。 页面制作的标准语言&#xff1a;HTML。 超文本标记语言 HTML (HyperText Markup Language) 是一种制作万维网页面的标准语言&#xff0c;它消除了不同计算机之间信息交流的障碍&#xff0c…

P1164 小A点菜题解

题目 uim拿到了uoi的镭牌后&#xff0c;立刻拉着基友小A到了一家餐馆&#xff0c;很低端的那种。uim指着墙上的价目表&#xff08;太低级了没有菜单&#xff09;&#xff0c;说&#xff1a;“随便点”。 不过uim由于买了一些书&#xff0c;口袋里只剩M元(M≤10000)。 餐馆虽…

【Java程序设计】【C00269】基于Springboot的漫画网站(有论文)

基于Springboot的漫画网站&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的漫画网站 本系统分为系统功能模块、管理员功能模块、以及用户功能模块。 系统功能模块&#xff1a;在系统首页可以查看首页、漫画投稿、…

Ubuntu20.04更新Cmake版本详解

最近在跑一个融合惯导定位的slam框架ins_eskf_kitti&#xff0c;在框架的安装过程中&#xff0c;需要对从GitHub上克隆下来的glog进行编译。其命令如下&#xff1a; glog&#xff1a; git clone https://github.com/google/glog.git cd glog mkdir build cd build cmake .. m…

【实战】一、Jest 前端自动化测试框架基础入门(中) —— 前端要学的测试课 从Jest入门到TDD BDD双实战(二)

文章目录 一、Jest 前端自动化测试框架基础入门5.Jest 中的匹配器toBe 匹配器toEqual匹配器toBeNull匹配器toBeUndefined匹配器和toBeDefined匹配器toBeTruthy匹配器toBeFalsy匹配器数字相关的匹配器字符串相关的匹配器数组相关的匹配器异常情况的匹配器 6.Jest 命令行工具的使…

Spring Boot 笔记 012 创建接口_添加文章分类

1.1.1 实体类添加校验 package com.geji.pojo;import jakarta.validation.constraints.NotEmpty; import lombok.Data;import java.time.LocalDateTime;Data public class Category {private Integer id;//主键IDNotEmptyprivate String categoryName;//分类名称NotEmptypriva…

Google刚刚推出了图神经网络Tensorflow-GNN

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…