Single_Number_II
来源:互联网 发布:php正规替换 编辑:程序博客网 时间:2024/05/19 02:24
题目描述:
Given an array of integers, every element appears three times except for one,
which appears exactly once. Find that single one.
Note:
Your algorithm should have a linear runtime complexity.
Could you implement it without using extra memory?
(给定一组整数,除了一次出现一次外,每个元素都出现三次。找到那一个。
注:
你应该有一个线性时间复杂度的算法。你能实现它,而无需使用额外的内存?)
思路:用一个大小为32的count数组来保存nums数组中所有整数转化为二进制之后i位上1的个数,如果说所有整数均出现三次,
那么count数组各位上的值一定是3或3的倍数,现在有一个只出现一次的数,那么这个数的出现会导致count数组有些位
上的值不是3或3的倍数,找到这些位就可以还原只出现一次的数。
public class Single_Number_II {public static int singleNumber(int[] nums) {int count[] = new int[32];int result = 0;for(int i=0;i<32;i++){for(int j=0;j<nums.length;j++){if(((nums[j]>>i)&1)==1){count[i]++;}}//因为只有一个出现一次的数,所以count[i]%3只可能是0或1result = result|((count[i]%3)<<i);}return result; }public static void main(String[] args) {int nums[] = {5,2,2,2,3,3,3};System.out.println(singleNumber(nums));}}