260 Single Number III 数组中除了两个数外,其他的数都出现了两次,找出这两个只出现一次的数
给定一个整数数组 nums,其中恰好有两个元素只出现一次,其他所有元素均出现两次。 找出只出现一次的那两个元素。
示例:
给定 nums = [1, 2, 1, 3, 2, 5], 返回 [3, 5].
注意:
结果的顺序并不重要,对于上面的例子 [5, 3] 也是正确答案。
你的算法应该具有线性复杂度,你能否仅使用恒定的空间复杂度来实现它?
详见:https://leetcode.com/problems/single-number-iii/description/
Java实现:
class Solution {
public int[] singleNumber(int[] nums) {
int size=nums.length;
int[] res=new int[2];
if(size==0||nums==null){
return res;
}
int sum=0;
for(int num:nums){
sum^=num;
}
int n=1;
while((sum&n)==0){
n=n<<1;
}
for(int num:nums){
if((num&n)!=0){
res[0]^=num;
}else{
res[1]^=num;
}
}
return res;
}
}
C++实现:
方法一:
class Solution {
public:
vector<int> singleNumber(vector<int>& nums) {
int size=nums.size();
if(size==0||nums.empty())
{
return vector<int>();
}
int sum=0;
for(int val:nums)
{
sum^=val;
}
int n=1;
//从低位向高位,第一个非0位所对应的数字
while((sum&n)==0)
{
n=n<<1;
}
vector<int> res(2,0);
for(int val:nums)
{
if(n&val)
{
res[0]^=val;
}
else
{
res[1]^=val;
}
}
return res;
}
};
方法二:
class Solution {
public:
vector<int> singleNumber(vector<int>& nums) {
int size=nums.size();
if(size==0||nums.empty())
return vector<int>();
int diff=0;
for(auto &ele:nums)
diff^=ele;
vector<int> res(2,0);
diff&=-diff;
for(auto &ele:nums)
if(diff&ele)
res[0]^=ele;
else
res[1]^=ele;
return res;
}
};
260 Single Number III 数组中除了两个数外,其他的数都出现了两次,找出这两个只出现一次的数的更多相关文章
- LeetCode 260 Single Number III 数组中除了两个数外,其他的数都出现了两次,找出这两个只出现一次的数
Given an array of numbers nums, in which exactly two elements appear only once and all the other ele ...
- 137 Single Number II 数组中除了一个数外,其他的数都出现了三次,找出这个只出现一次的数
给定一个整型数组,除了一个元素只出现一次外,其余每个元素都出现了三次.求出那个只出现一次的数.注意:你的算法应该具有线性的时间复杂度.你能否不使用额外的内存来实现?详见:https://leetcod ...
- LeetCode 137 Single Number II 数组中除了一个数外,其他的数都出现了三次,找出这个只出现一次的数
Given an array of integers, every element appears three times except for one, which appears exactly ...
- leetcode 136. Single Number 、 137. Single Number II 、 260. Single Number III(剑指offer40 数组中只出现一次的数字)
136. Single Number 除了一个数字,其他数字都出现了两遍. 用亦或解决,亦或的特点:1.相同的数结果为0,不同的数结果为1 2.与自己亦或为0,与0亦或为原来的数 class Solu ...
- leetcode 136 Single Number, 260 Single Number III
leetcode 136. Single Number Given an array of integers, every element appears twice except for one. ...
- LeetCode 260. Single Number III(只出现一次的数字 III)
LeetCode 260. Single Number III(只出现一次的数字 III)
- 在一个数组中,除了两个数外,其余数都是两两成对出现,找出这两个数,要求时间复杂度O(n),空间复杂度O(1)
题目:在一个数组中,除了两个数外,其余数都是两两成对出现,找出这两个数,要求时间复杂度O(n),空间复杂度O(1) 分析:这道题考察位操作:异或(^),按位与(&),移位操作(>> ...
- 【刷题-LeeetCode】260. Single Number III
Single Number III Given an array of numbers nums, in which exactly two elements appear only once and ...
- 【一天一道LeetCode】#260. Single Number III
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...
随机推荐
- linux 磁盘配额配置
1. 添加一块新磁盘 ,分区 .格式化 .(mkfs.etx3 /dev/sdc5/) 2.设置开机自动挂载(vi /etc/fstab) 添加磁盘配额支持 (用户配额usrquota.组配额grpq ...
- sql将日期按照年月分组并统计数量
SELECT DATE_FORMAT(releaseDate,"%Y年%m月") AS dates,COUNT(*) FROM t_diary GROUP BY DATE_FORM ...
- Combinations(带for循环的DFS)
Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For exampl ...
- HashSet源码分析2
package com.test1; import java.util.HashSet; import java.util.Iterator; import java.util.Set; public ...
- 【Nginx】负载均衡-加权轮询策略剖析
转自:江南烟雨 本文介绍的是客户端请求在多个后端服务器之间的均衡,注意与客户端请求在多个nginx进程之间的均衡相区别. 如果Nginx是以反向代理的形式配置运行,那么对请求的实际处理需要转发到后端服 ...
- win7 多用户远程登录
win7多用户远程登录 远程桌面服务使局域网(LAN)上的计算机可以连接到服务器(也称为远程计算机)并运行位于服务器上的程序.这可以只需要在1台机器上安装应用程序,其他机器共享使用.远程桌面连接使用远 ...
- c语言有头循环单链表
/************************************************************************* > File Name: singleLin ...
- Android 4.4环境搭建——配置AVD模拟器
AVD(Android Virtual Device)即Android模拟器,它是Android官方提供的一个能够执行Android程序的虚拟机,在执行Android程序之前,首先须要创建AVD模拟器 ...
- 关于camera senor的power引脚问题
<CamDevie> <HardWareInfo> <Sensor> <SensorName name="OV5640" >< ...
- [办公自动化]excel工作簿内的表无法删除,单击右键无删除键
今天同事问,我自己的工作簿,没有设置保护,但是就是无法删除其中的工作表. 后来发现,她的excel工作簿打开的文件名后面显示[共享]. 原因找到了. 取消共享就可以了.