LeetCode:Single Number II
题目地址:here
题目大意:一个整数数组中,只有一个数出现一次,其余数都出现3次,在O(n)时间,O(1)空间内找到这个出现一次的数
对于”只有一个数出现一次,其余数出现2次“的情况,很简单,只要把数组中所有数异或的结果就是这个出现一次的数,leetcode上也有这个题目。
关于本题:我们用一个大小为32的数组cnt来记录:(int数据的每个二进制位1的出现次数)%3,程序中cnt[i]记录第i+1个二进制位。如果某个数出现了三次并且他的第i个二进制位为1,因为做了模3操作,那么该数对数组cnt[i-1]的贡献为0,那么遍历完整个输入数组后,cnt[i]存储的就是这个出现一次的数的第i+1个二进制位。
程序中对于数组中的负数,都取其绝对值,这对结果没有影响,只是cnt数组最后保存的是这个出现一次的数的绝对值的二进制位,因此同时还要通过记录原数据的符号位来确定这个只出现一次的数的正负
代码如下:
class Solution {
public:
int singleNumber(int A[], int n)
{
// Note: The Solution object is instantiated only once and is reused by each test case.
short cnt[];//cut[i]表示A中第(i+1)个二进制位的1个数(结果对3求模)
short sign = ;//用来确定single number的符号,0正1负
memset(cnt, , sizeof(short)*);
for(int i = ; i < n; i++)
{
int tmp = A[i];
if(A[i] < )
{
tmp *= -;
sign = (sign + ) % ;
}
for(int k = ; k < ; k++)
{
cnt[k] = (cnt[k] + (tmp & 0x00000001))%;
tmp = tmp >> ;
}
}
int res = , base = ;
for(int i = ; i < ; i++)
{
res += (base*cnt[i]);
base <<= ;
}
return sign == ? res : res*-;
}
};
【版权声明】转载请注明出处:http://www.cnblogs.com/TenosDoIt/p/3388170.html
LeetCode:Single Number II的更多相关文章
- [LeetCode] Single Number II 单独的数字之二
Given an array of integers, every element appears three times except for one. Find that single one. ...
- LeetCode——Single Number II(找出数组中只出现一次的数2)
问题: Given an array of integers, every element appears three times except for one. Find that single o ...
- [leetcode]Single Number II @ Python
原题地址:http://oj.leetcode.com/problems/single-number-ii/ 题意:Given an array of integers, every element ...
- [Leetcode] single number ii 找单个数
Given an array of integers, every element appears three times except for one. Find that single one. ...
- [LeetCode] Single Number II 位运算
Given an array of integers, every element appears three times except for one. Find that single one. ...
- Leetcode Single Number II (面试题推荐)
还记得<剑指offer>和<编程之美>等书上多次出现的找一个数组中仅仅出现一次的数那个题吗? leetcode也有这道题 链接here 相信大家都知道用异或在O(n)的时间复 ...
- LeetCode | Single Number II【转】
题目:Given an array of integers, every element appears three times except for one. Find that single on ...
- LeetCode——Single Number II
Description: Given an array of integers, every element appears three times except for one. Find that ...
- leetcode Single Number II - 位运算处理数组中的数
题目描述: 给定一个包含n个整数的数组,除了一个数出现一次外所有的整数均出现三次,找出这个只出现一次的整数. 题目来源: http://oj.leetcode.com/problems/single- ...
随机推荐
- 谷歌浏览器Chrome安装,报0x80004002 等错误时,乖乖的这么解决!亲测有效。
1.卸载现有的谷歌浏览器,推荐使用360卸载(最好清扫残留文件) 2.在百度搜索中下载一个离线的 chrome浏览器(准备在安全模式先安装),记住,一定不能是谷歌官网的离线包(我屡次尝试安装官方离线包 ...
- swap分区
swap分区 一块的新加进来的硬盘,我们要怎么给它创建swap分区呢?要遵循下面四个步骤: (1)使用一个现有的分区,比如记为A (2)然后分区类型的16进制编码,即A的16进制编码. (3)格式化A ...
- PS网页设计教程XXV——使用Photoshop设计的老式组合布局
作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,“熟读唐诗三百首,不会作诗也会吟”. 本系列的教程来源于网上的PS教程,都是国外的,全英文的.本人尝试 ...
- GDI学习之俄罗斯方块续
当前方块对象 #region 定义砖块int[i,j,y,x] Tricks:i为那块砖,j为状态,y为列,x为行 private int[, , ,] Tricks = {{ { {,,,}, {, ...
- mongo学习笔记(五):分片
分片 人脸: 代表客户端,客户端肯定说,你数据库分片不分片跟我没关系,我叫你干啥就干啥,没什么好商量的. mongos: 首先我们要了解”片键“的概念,也就是说拆分集合的依据是什么?按照 ...
- 无法将匿名方法转换为System.Delegate
在WinForm中,不允许非UI线程访问UI,如果非UI线程需要跨线程调用UI控件,通常的解决办法是使用Control类中的Invoke方法,传递给该方法一个委托和委托调用的参数列表(params [ ...
- 排序(qsort sort的使用)
前情:因平常写代码是常将比较函数弄混(写好了排序还要确认一下-.-!),还是写篇博客,方便以后查阅 C语言qsort函数对int类型数组排序: #include "stdio.h" ...
- NOIP2010普及组T3 接水问题 ——S.B.S.
题目描述 学校里有一个水房,水房里一共装有 m 个龙头可供同学们打开水,每个龙头每秒钟的 供水量相等,均为 1. 现在有 n 名同学准备接水,他们的初始接水顺序已经确定.将这些同学按接水顺序从 1到 ...
- IOS添加手势识别
ios里面有手势识别,多点触控等功能,过去要实现手势识别很复杂,现在苹果为我们实现了,手势识别变得很简单 1.向视图添加手势识别器:(一般由controller完成,有时View也可以添加) 2.提供 ...
- codeforces 484A A. Bits(贪心)
题目链接: A. Bits time limit per test 1 second memory limit per test 256 megabytes input standard input ...