LeetCode Single Number III (xor)
2024-08-26 08:45:56
题意:
给一个数组,其中仅有两个元素是出现1次的,且其他元素均出现2次。求这两个特殊的元素?
思路:
跟查找单个特殊的那道题是差不多的,只是这次出现了两个特殊的。将数组扫一遍求全部元素的异或和 x,结果也就是这两个特殊的元素的异或和了。现在必须找到两个当中的一个,才能恢复出另外一个。注意到x的二进制位中必定有1,那么只需要找到其中任意一个1对应的整数,再将数组中所有该位为1的计算他们的异或和a,a就是结果了,而另一个数b=x^a。
vector<int> singleNumber(vector<int>& nums) {
int x=;
for(int i=; i<nums.size(); i++) x^=nums[i];
int lowbit=x-(x&(x-)), a=;
for(int i=; i<nums.size(); i++)
if( lowbit & nums[i] ) a^=nums[i];
return vector<int>{a,x^a};
}
AC代码
最新文章
- Xilinx SDK Problem Solution in Ubuntu
- Revit二次开发示例:ModelessForm_ExternalEvent
- Android——不同activity之间数据传递
- Objective-C :Category
- CANoe 入门 Step by step系列(二)CAPL编程【转】
- poj3164 (朱刘算法 最小树形图)
- iOS极光推送的基本使用
- [Android ADB] An auto-input method for Android and Windows
- QtQuick 中的 qml 与 Qt 的 C++
- open和opener使用說明
- Qt全局宏和变量
- 如何创建应用程序包(C ++)
- Java垃圾收集器概述
- WSDL文件
- 记录配置xshell显示中文乱码的一次巧合
- Solr5.5高级应用(基于tomcat9)
- redis安装,第一天
- webvirtmgr-重命名kvm虚拟机的名称
- pushpin Server-sent events &;&; openresty 集成试用
- 在Docker Swarm上部署Apache Storm:第2部分