260.leetcode Single Number III(medium)[两个单数]
2016-08-06 11:39
423 查看
Given an array of numbers
the other elements appear exactly twice. Find the two elements that appear only once.
For example:
Given
Note:
The order of the result is not important. So in the above example,
also correct.
Your algorithm should run in linear runtime complexity. Could you implement it using only constant space complexity?
数组中只有两个元素只出现了一次,其他元素都出现了两次,因此还是先做异或得到这两个元素异或的结果result,然后获取result最右边为1的位置。因为result为1的位置表示这两个单数在这一位上不同,因此可以按照在这一位上取值不同对数组再重新遍历异或得到r1和r2.
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].
Note:
The order of the result is not important. So in the above example,
[5, 3]is
also correct.
Your algorithm should run in linear runtime complexity. Could you implement it using only constant space complexity?
数组中只有两个元素只出现了一次,其他元素都出现了两次,因此还是先做异或得到这两个元素异或的结果result,然后获取result最右边为1的位置。因为result为1的位置表示这两个单数在这一位上不同,因此可以按照在这一位上取值不同对数组再重新遍历异或得到r1和r2.
class Solution { public: void FindFirstOne(int result,vector<int>& nums,int &r1,int& r2) { int pos = 0; while((result&1) == 0)//寻找最右边是1的位置 { pos++; result = result>>1; } for(int i=0;i<nums.size();i++) { if((nums[i]>>pos)&1) { r1^=nums[i]; }else r2^=nums[i]; } } vector<int> singleNumber(vector<int>& nums) { if(nums.size()<=2) return nums; int result = 0; for(int i=0;i<nums.size();i++) result ^=nums[i]; int r1=0,r2=0; FindFirstOne(result,nums,r1,r2); vector<int> last; last.push_back(r1); last.push_back(r2); return last; } };
相关文章推荐
- hdu 1754 I Hate it(线段树的单节点更新,求区间最大值)
- 137.leetcode Single Number II(medium)[单数 三次]
- (四)、类型转换
- 简易冒泡排序
- 嵌入式C语言知识整理(1)
- Lightoj1259——Goldbach`s Conjecture(哥德巴赫猜想)
- 杭电ACM—1106 排序
- 安卓实战开发之JNI再深入了解
- MySQL学习笔记第3课(共10课)
- springmvc传值
- 用两种方法实现栈---顺序表和链表
- ByteBuffer的心得
- caffe——cifar10模型训练自己的数据
- ubuntu下安装ros出现“无法下载-package.ros.org中某个包-校验和不符”的解决方法
- Groovy
- 理解一般指针和指向指针的指针
- Linux下的C语言学习笔记(3)
- 量化分析师的Python日记【第4天:一大波金融Library来袭之scipy篇】
- Hdu 3694 Fermat Point in Quadrangle(三分)
- Unity触摸操作