C++之异或运算符

2024-06-06 23:08
文章标签 c++ 运算符 异或

本文主要是介绍C++之异或运算符,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言:做leetcode遇到Missing Number和Single Number ⅠⅢ问题

一、"异或"运算符(“∧”)

也称XOR运算符。规则:相同为0,相异为1,0∧0=0,0∧1=1,1∧0=1,1∧1=0

应用:

(1)与0相∧,保留原值

(2)交换两个值,不用临时变量 

a = a^b;
b = b^a;
a = a^b;
3)与自己相 ∧,值为0

二、leetcode No268. Missing Number

Question:

Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missing from the array.

For example,
Given nums = [0, 1, 3] return 2.

Algorithm:Bit Manipulation

把0-n的数异或后再与nums里的数异或,即得到Missing Number(除了Missing Number都自己与自己异或了一次)

Submitted Code:
class Solution {
public:int missingNumber(vector<int>& nums) {int xor_num = 0;int length = nums.size();while(length!=0){xor_num ^= length;length--;}for(int i : nums)xor_num ^= i;return xor_num;}
};

三、leetcode No136. Single Number

Question:
Given an array of integers, every element appears twice except for one. Find that single one.
Algorithm:Bit Manipulation
所有元素异或
Submitted Code:
class Solution {
public:int singleNumber(vector<int>& nums) {int x = 0;for(int i=0;i<nums.size();i++)x = x^nums[i];return x;}
};

四、leetcode No260. Single Number III

Question:

Given an array of numbers nums, in which exactly two elements appear only once and all the other elements appear exactly twice. Find the two elements that appear only once.

For example:

Given nums = [1, 2, 1, 3, 2, 5], return [3, 5].

Algorithm:Bit Manipulation

1、按照Single Number的方法,对所有元素异或,那么得到的是这两个元素异或值xor_two
2、如何将两个元素分开,由于值不同的位异或为1,所以我们不妨可以找出xor_two的最后一个1(-xor_two为其补码),把两个元素区别,然后再分别对两个数组异或
Submitted Code:
class Solution {
public:vector<int> singleNumber(vector<int>& nums) {int xor_two = nums[0];int last_bit = 0;vector<int> result = {0,0};for(int i=1;i<nums.size();i++)xor_two = xor_two ^ nums[i];last_bit = xor_two & (~(xor_two-1)); //相异为1,取异或的最后一个1,把两个元素区分,然后分别对两个数组异或for(int i=0;i<nums.size();i++){if(nums[i] & last_bit)result[0] ^= nums[i];elseresult[1] ^= nums[i];}return result;}
};




这篇关于C++之异或运算符的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1037489

相关文章

C++11范围for初始化列表auto decltype详解

《C++11范围for初始化列表autodecltype详解》C++11引入auto类型推导、decltype类型推断、统一列表初始化、范围for循环及智能指针,提升代码简洁性、类型安全与资源管理效... 目录C++11新特性1. 自动类型推导auto1.1 基本语法2. decltype3. 列表初始化3

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符

C++中detach的作用、使用场景及注意事项

《C++中detach的作用、使用场景及注意事项》关于C++中的detach,它主要涉及多线程编程中的线程管理,理解detach的作用、使用场景以及注意事项,对于写出高效、安全的多线程程序至关重要,下... 目录一、什么是join()?它的作用是什么?类比一下:二、join()的作用总结三、join()怎么

MySQL中比较运算符的具体使用

《MySQL中比较运算符的具体使用》本文介绍了SQL中常用的符号类型和非符号类型运算符,符号类型运算符包括等于(=)、安全等于(=)、不等于(/!=)、大小比较(,=,,=)等,感兴趣的可以了解一下... 目录符号类型运算符1. 等于运算符=2. 安全等于运算符<=>3. 不等于运算符<>或!=4. 小于运

C++中全局变量和局部变量的区别

《C++中全局变量和局部变量的区别》本文主要介绍了C++中全局变量和局部变量的区别,全局变量和局部变量在作用域和生命周期上有显著的区别,下面就来介绍一下,感兴趣的可以了解一下... 目录一、全局变量定义生命周期存储位置代码示例输出二、局部变量定义生命周期存储位置代码示例输出三、全局变量和局部变量的区别作用域

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)

c++ 类成员变量默认初始值的实现

《c++类成员变量默认初始值的实现》本文主要介绍了c++类成员变量默认初始值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录C++类成员变量初始化c++类的变量的初始化在C++中,如果使用类成员变量时未给定其初始值,那么它将被

C++中NULL与nullptr的区别小结

《C++中NULL与nullptr的区别小结》本文介绍了C++编程中NULL与nullptr的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编... 目录C++98空值——NULLC++11空值——nullptr区别对比示例 C++98空值——NUL

C++ Log4cpp跨平台日志库的使用小结

《C++Log4cpp跨平台日志库的使用小结》Log4cpp是c++类库,本文详细介绍了C++日志库log4cpp的使用方法,及设置日志输出格式和优先级,具有一定的参考价值,感兴趣的可以了解一下... 目录一、介绍1. log4cpp的日志方式2.设置日志输出的格式3. 设置日志的输出优先级二、Window

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat