数组中出现一次的两个数 leetcode Single Number III
来源:互联网 发布:淘宝店铺售后怎么处理 编辑:程序博客网 时间:2024/05/14 07:42
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]
.
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?
解题思路:有一个数组,其中只有两个数出现一次,其他数均出现两次,求出这两个数。参考signal number的第二种解法:http://blog.csdn.net/sinat_24520925/article/details/45576735
我们将这个数组分成两个数组,每个数组中都只有一个元素出现一次。也就是先异或所有元素,得到resultExclusive,找到resultExclusive中二进制表示的由右向左的第一位1,则表明数组中有一个一次出现的数该位的值不同,一个为0、另一个为0.下面就好做了,将数组中该位均为0的异或,均为1的异或就可求得只出现一次的那两个数。
代码如下:
class Solution {public: vector<int> singleNumber(vector<int>& nums) { vector<int> res; if(nums.size()==0) return res; res.push_back(0); res.push_back(0); int resultExclusive=0; for(int i=0;i<nums.size();i++) resultExclusive^=nums[i]; int indexof1=0; while(((resultExclusive&1)==0)&&(indexof1<8*sizeof(int))) { resultExclusive=resultExclusive>>1; ++indexof1; } for(int i=0;i<nums.size();i++) { if((nums[i]>>indexof1)&1==1) res[0]^=nums[i]; else res[1]^=nums[i]; } return res; }};值得注意的是::
(resultExclusive&1)==0)
(resultExclusive&1)一定要加(),否则因为==的优先级高于&,会导致while循环无法进入!!!!
0 0
- 数组中出现一次的两个数 leetcode Single Number III
- 260. Single Number III (找到数组中仅出现一次的两个数)
- leetcode_260. Single Number III 数组中找出两个只出现一次的元素
- Single Number III & 数组中只出现一次的数字
- Single Number 数组找只出现一次的数@LeetCode
- 找出两个只出现一次的数(其它都出现两次)Single Number III
- 找出数组中只出现一次的数(single number )
- Single Number III 两个不同的数出现一次,其余两次,异或
- Leetcode 260 Single Number III 仅出现一次的数字
- LeetCode 260 Single Number III(只出现一次的数字 III)(*)
- 位运算-Single Number III(只有两个不同的数字出现了一次,其余出现了两次,找出这两个数)
- 136.Single Number (数组中只出现一次的数)
- 【leetcode】数组中找出只出现一次的数字(Single Number)
- 【LeetCode】- Single Number(从数组中找出只出现一次的数字)
- 【leetcode】在一堆每个数字都出现三次的数组中,找到那个只出现一次的数(Single Number II)
- Single Number --- 找出数组中出现一次的数字
- Single Number II -- 找出数组中唯一出现一次的数,其它数都出现了三次
- [LeetCode]136. Single Number(找出数组中单独出现的数)
- 随记
- 大势所趋!十大令人振奋的移动端APP设计趋势
- LINUX系统安全_SANDBOX
- C++ 转 Java 要点总结
- Highcharts使用指南
- 数组中出现一次的两个数 leetcode Single Number III
- HDU 1874 畅通工程续(Dijkstra)
- jdbc连接数据库失败,com.microsoft.sqlserver.jdbc.SQLServerException: 到主机 的 TCP/IP 连接失败。
- Richedit使用大全
- ActionBar自定义操作栏、无法显示
- jdk8.0安装以及环境变量设置注意事项
- ajax+JS 实现分页
- Android 四大组件之一:Service后台服务之IntentService
- 通知栏声音的开启与关闭