137. Single Number II

来源:互联网 发布:unity3d入门 编辑:程序博客网 时间:2024/04/27 15:32

题目: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?
思路:
K=3时,异或就不行了。
对操作数每一位进行相加%3,最后值便是结果。

写代码时遇到小困难。(基本功差)
1、如何取某个整数m的第n位
这个比较好弄,(m>>n-1)&1
2、二进制数值怎么相加得到十进制解
这个想了半天。一开始想到移位或,但是脑子又想到进位(太菜)
| <<

public class Solution {    public int singleNumber(int[] nums) {        int result = 0;        for(int i=0;i<32;i++)        {            int sum = 0;            for(int num : nums)            {                sum += (num>>i)&1;            }            result |= (sum%3)<<i;        }        return (int)result;    }}

总结:
k=偶数,异或^解决。
k=奇数,对操作数每一位进行相加%k

0 0