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. ...
随机推荐
- 改进uwsgi启动脚本,使其支持多个独立配置文件
最近在研究flask,在架设运行环境的时候犯了难.因为我想把每个独立的应用像NGINX处理多个网站那样,每个应用单独一个配置文件.而网上流传的uwsgi启动脚本都只支持单个配置文件.虽然有文章说可以把 ...
- linq lambda let
1.linq let用法 var query = from x in db.Users let theage = x.age let sexstring = x.sex ? "男" ...
- JS进阶之原型
之前有在自己的文章中谈到对象,而说到对象我们就不可避免的要扯到原型,并且原型也是我们必须得理解到位的一个点,那接下来我们就来聊一聊js的原型吧. JS中一切皆为对象,那么原型也是一种对象.所以它有对象 ...
- 关于WebBrowser访问百度地图
前段时间遇到一个困惑用WebBrowser访问百度地图的时候,百度会自动转至让下载sdk的页面,经过一个仁兄的点拨,可以改变WebBrowser的agent来骗过网站.经过试验成功.贴源码如下: st ...
- 十一个行为模式之中介者模式(Mediator Pattern)
定义: 用一个中介对象(中介者)来封装一系列的对象交互,使各个对象之间不需要显式地相互引用,从而降低耦合度,而且可以独立地改变他们之间的交互关系. 解耦后: 结构图: Mediator:抽象中介者,定 ...
- 《C#微信开发系列(4)-接收 / 返回文本消息》
4.0接收 / 返回文本消息 ①接收/返回文本消息原理说明 当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上,着手开发之前先行阅读微信公众平台接收普通消息 ...
- div层调整zindex属性无效原因分析及解决方法
在做的过程中,发现了一个很简单却又很多人应该碰到的问题,设置Z-INDEX属性无效.在CSS中,只能通过代码改变层级,这个属性就是z- index,要让z-index起作用有个小小前提,就是元素的po ...
- Material Design 概念,环境和基本属性
Material Design 概念,环境和基本属性 Material Design是随Android 5.0推出的一种设计概念, 涉及到了跨平台和设备的视觉,动态,交互设计等方面. 设计概念 M ...
- [C#6] 5-自动属性增强
0. 目录 C#6 新增特性目录 1. 老版本代码 internal class Person { public string Name { get; private set; } public in ...
- 软件工程--界面UI 的原型设计
经过今天的讨论, 我们组初步给出了设计方案. 安装了一晚上的 mockupBuilder 终于绘制了几份界面的原型图, 这里需要吐槽下 mockupBuilder, 这个软件很好用, 不过网页版和单机 ...