单独的数字

题目:

给定一个数组,除了一个数出现1次之外,其余数都出现3次。找出出现一次的数。
如:{1, 2, 1, 2, 1, 2, 7}, 找出7.
格式:第一行输入一个数n,代表数组的长度,接下来一行输入数组A[n],(输入的数组必须满足问题描述的要求),最后输出只出现一次的数。
要求:你的算法只能是线性时间的复杂度,并且不能使用额外的空间哦~

思路:

首先这题很容易联想到另外一题,也是找出单独的数,不同的是,另外一题中其他数都是出现2次,所以使用异或运算后,对于二进制每一位,相同的数就被消除了,得到了单独的数字。但是,这题中其他数字是出现3次的。不过我们还是可以从前面的解法得到启发,使用二进制的位运算,既然其他每次数都出现3次,那么如果针对每一位求和并对3取余,那么那些出现3次的数字在这一位的和对3取余后肯定是0,其实就是单独的那个数在这一位上的结果。所以,针对32位的整数,我们只要求出二进制的每一位的和对3取余,就是单独的数的二进制,再转化成10进制,就是我们需要的答案。

文/破东风CAFEBABY(简书作者)
原文链接:http://www.jianshu.com/p/8c454ade848e
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

时间: 2024-10-03 22:45:22

单独的数字的相关文章

[LeetCode] Single Number II 单独的数字之二

Given an array of integers, every element appears three times except for one. Find that single one. Note:Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory? 这道题是之前那道单独的数字的延伸,那道题的解法就比较独特,是利用计算机按位储

计蒜客 单独的数字

单独的数字 给定一个数组,除了一个数出现1次之外,其余数都出现3次.找出出现一次的数. 如:{1, 2, 1, 2, 1, 2, 7}, 找出7. 格式: 第一行输入一个数n,代表数组的长度,接下来一行输入数组A[n],(输入的数组必须满足问题描述的要求),最后输出只出现一次的数. 要求: 你的算法只能是线性时间的复杂度,并且不能使用额外的空间哦- 样例输入 4 0 0 0 5 样例输出 5 1 #include"iostream" 2 #define MAX 100000 3 usi

第15题:单独的数字

给定一个数组,除了一个数出现1次之外,其余数都出现3次.找出出现一次的数. 如:{1, 2, 1, 2, 1, 2, 7}, 找出7. 格式: 第一行输入一个数n,代表数组的长度,接下来一行输入数组A[n],(输入的数组必须满足问题描述的要求),最后输出只出现一次的数. 要求: 你的算法只能是线性时间的复杂度,并且不能使用额外的空间哦- 样例输入 4 0 0 0 5 样例输出 5 问题解析: 其实这题不难(尽管"不能使用额外的空间"),主要原理就是遍历数组中有没有与其重复的数字,判断有

[LeetCode] Single Number 单独的数字

Given an array of integers, every element appears twice except for one. Find that single one. Note:Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory? 本来是一道非常简单的题,但是由于加上了时间复杂度必须是O(n),并且空间复杂度为O(1)

【LeetCode每天一题】Single Number(数组中单独的数字)

Given a non-empty array of integers, every element appears twice except for one. Find that single one. Note: Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory? Example 1: Input: [2,2,1] Output:

[LeetCode] Single Number III 单独的数字之三

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

[LintCode] Single Number 单独的数字

Given 2*n + 1 numbers, every numbers occurs twice except one, find it. Have you met this question in a real interview? Yes Example Given [1,2,2,1,3,4,3], return 4 Challenge One-pass, constant extra space. LeetCode上的原题,请参见我之前的博客Single Number. class So

[LeetCode] Missing Number 丢失的数字

Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missing from the array. For example, Given nums = [0, 1, 3] return 2. Note: Your algorithm should run in linear runtime complexity. Could you implement it u

[LeetCode] Bitwise AND of Numbers Range 数字范围位相与

Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers in this range, inclusive. For example, given the range [5, 7], you should return 4. Credits:Special thanks to @amrsaqr for adding this problem and creatin