LeetCode Single Number I / II / III
【1】LeetCode 136 Single Number
题意:奇数个数,其中除了一个数只出现一次外,其他数都是成对出现,比如1,2,2,3,3...,求出该单个数。
解法:容易想到异或的性质,两个相同的数异或为0,那么把这串数从头到尾异或起来,最后的数就是要求的那个数。
代码如下:
class Solution {
public:
int singleNumber(vector<int>& nums) {
int sum = ;
for(int i=;i<nums.size();i++)
sum ^= nums[i];
return sum;
}
};
【2】LeetCode 137 Single Number II
题意:给一串数,除了一个数只出现一次外,其他数都出现了三次。求那个单个数。
解法:还是从位操作上考虑,把每个数写成二进制列出来,每位对齐,可以发现,每一位上的1的个数要么是3的倍数,要么是3的倍数+1,那么把每一位的1个数加起来,模3即可的单个数的该位为0还是为1。
代码如下:
class Solution {
public:
int singleNumber(vector<int>& nums) {
int ans = ;
for(int i=;i<;i++) {
int dream = (<<i), cnt = ;
for(int j=;j<nums.size();j++)
cnt += (bool)(nums[j] & dream);
cnt = cnt % ;
ans ^= (cnt << i);
}
return ans;
}
};
【3】LeetCode 260 Single Number III
题意:有一串数字,其中有两个不同的数,各出现一次,其他的数都出现2次。找出这两个数。
解法:看到其他数出现两次,又想到异或操作,如果全部异或起来,得到的是那两个数的异或。既然是两个不同的数,那么异或的二进制里面必然是有1的,我们先找出这个1,然后逐个检查,如果这位有1,那么异或到a,否则异或到b,最后的a,b即是这两个值。找1可以找最后一个1,x&(-x)即可。
代码如下:
class Solution {
public:
vector<int> singleNumber(vector<int>& nums) {
int xorsum = ;
for(int i=;i<nums.size();i++) xorsum ^= nums[i];
int lastdifferentbit = xorsum & (-xorsum);
int a = , b = ;
for(int i=;i<nums.size();i++) {
if(nums[i] & lastdifferentbit) a ^= nums[i];
else b ^= nums[i];
}
return vector<int>{a,b};
}
};
LeetCode Single Number I / II / III的更多相关文章
- 【LeetCode】Single Number I & II & III
Single Number I : Given an array of integers, every element appears twice except for one. Find that ...
- Leetcode 137. Single Number I/II/III
Given an array of integers, every element appears twice except for one. Find that single one. 本题利用XO ...
- LeetCode 【Single Number I II III】
Given an array of integers, every element appears twice except for one. Find that single one. 思路: 最经 ...
- single number i && ii && iii
Problem statement Elementary knowledge: There is a popular question when I seeked my job at Beijing: ...
- LeetCode: Single Number I && II
I title: Given an array of integers, every element appears twice except for one. Find that single on ...
- LeetCode Single Number I II Python
Single Number Given an array of integers, every element appears twice except for one. Find that sing ...
- 4.Single Number && Single Number (II)
Single Number: 1. Given an array of integers, every element appears twice except for one. Find that ...
- [LeetCode] Single Number III 单独的数字之三
Given an array of numbers nums, in which exactly two elements appear only once and all the other ele ...
- [LeetCode] Single Number II 单独的数字之二
Given an array of integers, every element appears three times except for one. Find that single one. ...
随机推荐
- SqlServer -- char与varchar、nchar、N
一.char与varchar 带var的表示的是:可变长度,会根据实际存储数据的大小动态重新分配存储空间,相对来说节省存储空间. 不带var的表示的是:固定长度,存储3字符也是要占用10个字节的,会自 ...
- java for循环冒泡排序
int[]a =new int[]{7,19,66,21,88,40}; for(int i=1;i<=a.length-1;i++){ //比总长度减1趟就排好序了.因为每一趟出一个值. fo ...
- Lind.DDD.Utils.HttpHelper里静态对象引出的Http超时问题
回到目录 Lind.DDD.Utils.HttpHelper组件主要实现了对HTTP的各种操作,如Get,Post,Put和Delete,它属于最纯粹的操作,大叔把它封装的目的主要为了实现与API安全 ...
- Xdebug文档(二)变量显示特性
Xdebug能替代PHP的var_dump()函数来显示变量值.xdebug的版本包含对不同数据类型作数组元素/对象属性.最大深度和字符串长度以不同颜色标识.这里也有一些功能能很好地处理变量显示. 相 ...
- Atitit. null错误的设计 使用Optional来处理null
Atitit. null错误的设计 使用Optional来处理null 然后,我们再看看null还会引入什么问题. 看看下面这个代码: String address = person.getCount ...
- Linq的分页与组合查询的配合使用
1.首先使用Linq连接数据库,并扩展属性 public partial class User { public string SexStr { get { string end = "&l ...
- CSS3 莲花盛开动画
点击这里查看效果:http://keleyi.com/a/bjad/32gxxsaw.htm 或者:http://keleyi.com/keleyi/phtml/css3/10a.htm 效果图: 代 ...
- c#使用json接口
前些日子将项目由使用数据库改版为使用接口,由于接口返回的xml中多了一些附加信息,导致xml转化后的DataTable无法储存在MemCache中.这时可以将xml序列化为其对应的类,当然由于当时对x ...
- 原生JS:全局属性、全局方法详解
全局属性.全局方法 原创文章,转摘请注明出处:苏福:http://www.cnblogs.com/susufufu/p/5853342.html 首先普及几个我总结的非常实用又很基础的知识:(呵呵,仅 ...
- text-align=center 失效原因
text-align属性是针对 内联元素居中得属性设置,对于块状元素使用margin:0 auto;来控制居中: 笔者在设置一个h2标签时设置了text-align:center;但是却始终出现在中间 ...