首页 > 代码库 > Single Number II
Single Number II
Single Number II
Total Accepted: 20813 Total Submissions: 62103My SubmissionsGiven 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?
Discuss
由于其他数字都出现了三次,所以把所有数的第n个bit上的1加起来,一定是3的倍数,或者%3为1。因为如果没有那个单个出现的数,把所有数的第n个bit上的1加起来一定是3的倍数。加了那个单个出现的数之后,如果那个数在这位上是1,那么和就是%3为1了。反之,如果那位为零,就是3的倍数了。
推广到所有其他数出现了n>=3次,只有一个数出现一次,都是这个道理。
public class Solution { public int singleNumber(int[] A) { int arr[] = new int[33]; //and the number on every bit,and add the bits for(int i=0;i<=31;i++) { int bit = 1<<i; // the bits is 2^31 for(int j=0;j<A.length;j++) { // this must be unequal, not bigger than if((A[j]&bit)!=0) { arr[i]++; } } } int res = 0; // reconstruct the number for(int i=0;i<=31;i++) { if(arr[i]%3!=0) { res += 1<<i; } } return res; } }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。