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 = 0;for(int i=0;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 = 0;for(int i=0;i<32;i++) {int dream = (1<<i), cnt = 0;for(int j=0;j<nums.size();j++)cnt += (bool)(nums[j] & dream);cnt = cnt % 3;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 = 0;for(int i=0;i<nums.size();i++) xorsum ^= nums[i];int lastdifferentbit = xorsum & (-xorsum);int a = 0, b = 0;for(int i=0;i<nums.size();i++) {if(nums[i] & lastdifferentbit) a ^= nums[i];else b ^= nums[i];}return vector<int>{a,b};} };
转载于:https://www.cnblogs.com/whatbeg/p/5269453.html
LeetCode Single Number I / II / III相关推荐
- LeetCode: Single Number I II
Given an array of integers, every element appears twice except for one. Find that single one. 这个方法重来 ...
- [LeetCode]Single Number II
今天室友推荐了一道LeetCode上面的练习题Single Number II,题目大概的意思是有一个整形的数组,里面只有一个数是出现一次的,其他的数都出现了三次,然后让把这个数找出来. 第一眼看到这 ...
- leetcode -day8 Copy List with Random Pointer Single Number I II
五一中间断了几天,开始继续... 1. Copy List with Random Pointer A linked list is given such that each node cont ...
- [Leetcode] single number ii 找单个数
Given an array of integers, every element appears three times except for one. Find that single one. ...
- LeetCode Single Number III(位操作)
问题:给出一个数组,有两个数只出现一次,其它都出现两次. 思路:先对数组求异或,得到两个数异域的结果.然后确定差异的最低位.再将数组与这个差异位作异域,得到其中的一个数.再与异域结果异域后即得到另外一 ...
- LeetCode Single Number II(位操作)
问题:给出一个数组,其中只有一个数出现一次,其它数出现三次,找出出现一次的数 思路: 1.统计每位出现的次数,如果mod 3等于1,则将该位置为1,最后即得到出现一次的数. 2.使用三个变量来分别来表 ...
- leetcode - Single Number
今天开始刷leetcode上的题,争取校招前刷过一遍,从AC率最高的题目开始刷,不废话了,看题 题目:Single Number Given an array of integers, every e ...
- leetcode Single Number python
Single Number Given an array of integers, every element appears twice except for one. Find that sing ...
- leetcode 263, 264, 1201, 313. Ugly Number I, II, III, Super Ugly Number(leetcode 丑数问题合集)
263. Ugly Number https://leetcode.com/problems/ugly-number/ 本题题解由下面的 264. Ugly Number II 改造而来,所以效率会比 ...
最新文章
- comsat java_java-com.thoughtworks.xstream.converters.ConversionExce...
- 查看ngnix使用的php.ini位置_修改Nginx php.ini文件的经典教程
- 采集文件到kafka
- 九九乘法表的C语言实现
- php补充 扩展,PHP安装扩展补充说明
- 学习python课程_想学习Python吗? 这是我们的免费4小时互动课程
- 采访实录:黄碟泛滥的市场调查
- poj 2503 Babelfish trie树!!!!指针版和数组版 基础
- python五子棋游戏代码实现
- Maven之POM文件build标签详解
- 电子通讯录(数据库版存储)
- 会计信息质量可靠性的案例_论会计信息质量特征及其可靠性
- 块存储、文件存储、对象存储
- 法拉科机器人接头_【发那科】图解FANUC机器人I/O信号板
- 下载centOS,下载各种linux版本的镜像,来这里!
- Python轻量级ORM框架——peewee
- mysql useing_MySQL ON与USING?
- 扩展欧几里得算法、乘法逆元与中国剩余定理
- Docker 容器技术入门
- 【前端面试】39道Vue高频面试题,亲测有效!!!快来看看呀!!