设为首页 加入收藏

TOP

Leetcode:signal_number_ii
2015-07-20 17:31:08 来源: 作者: 【 】 浏览:2
Tags:Leetcode:signal_number_ii

一、 题目

给一个数组,其中只有一个数出现一次,其他的数都出现3次,请找出这个数。要求时间复杂度是O(n),空间复杂度O(1)。

二、 分析

第一次遇见这样的题,真心没思路….前面的signal number中我们可以直接异或得到结果,很显然这个更复杂了。暴力解法或排序显然无法满足时空要求,所以还得回到位运算上,既然是同样的数出现了三次,我们可以想到他们的二进制表达对应的位置上相同。对于除出现一次之外的所有的整数,其二进制表示中每一位1出现的次数是3的整数倍,将所有这些1清零,剩下的就是最终的数。如果我们在每一个位置上取到出现1的次数,并进行余3操作,则可消除该数。

例如:A[]={2,3,4,3,2,2,3}

0010

0011

0100

0011

0010

0010

0011

= -0-1-6-3-(1的个数)

0100

int型数据为32位,可以开一个大小为32的int型数组存储N个元素的各个二进制位的1出现的次数,然后将该次数模3运算。

PS:后面几种方法刚开始真心没看懂….自己弱菜


class Solution {
public:
    int singleNumber(int A[], int n) {
        int bitint[32]={0};
        int ans=0;
        for(int i=0; i<32; i++){
            for(int j=0; j
  
   >i)&1;
            }
            ans|=(bitint[i]%3)<
   
    

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++ AMP 介绍(二) 下一篇Vijos P1881 闪烁的繁星 (自己加..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·在 Redis 中如何查看 (2025-12-26 03:19:03)
·Redis在实际应用中, (2025-12-26 03:19:01)
·Redis配置中`require (2025-12-26 03:18:58)
·Asus Armoury Crate (2025-12-26 02:52:33)
·WindowsFX (LinuxFX) (2025-12-26 02:52:30)