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));}}


原创粉丝点击