leetcode137 Single Number II java

来源:互联网 发布:南宁php招聘 编辑:程序博客网 时间:2024/05/21 00:46

Description

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?

解法

先上代码:

    public int singleNumber(int[] nums) {        int first=0, second=0;        for(int i=0; i<nums.length; i++) {            first = (nums[i] ^ first) & ~second;            second = (nums[i] ^ second) & ~first;        }        return first;    }

这道题可以这么理解:
每个数字出现三次即将其清零,最后剩下出现一次的就是结果。即00(0次)>10(1次)>01(2次)>00(3次)。
first表示:第一次出现该数的时候存入first。
second表示:这个数第二次出现,将first置零,second置1。
如果数第三次出现,它会尝试存入first,可是~second为0,所以存不上,此时first,second全部置空,这个数相当于没出现。

0 0
原创粉丝点击