zoukankan      html  css  js  c++  java
  • [leetcode]137. Single Number II

    137. Single Number II

    Total Accepted: 87688 Total Submissions: 229128 Difficulty: Medium

    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?

    Subscribe to see which companies asked this question

    int 数据共有32位,可以用32变量存储 这 N 个元素中各个二进制位上  1  出现的次数,最后 在进行 模三 操作,如果为1,那说明这一位是要找元素二进制表示中为 1 的那一位。代码如下:

    时间:O(32*N),这是一个通用的解法,如果把出现3次改为 k 次,那么只需模k就行了

    class Solution {
    public:
    int singleNumber(vector<int>& nums) {
    int ret=0;
    int size=nums.size();
    int bits=sizeof(int)*8;
    vector<int> bitvec(bits,0);
    for(int i=0;i<bits;i++){
    for(int j=0;j<size;j++){
    if((nums[j]>>i)&1==1)
    bitvec[i]++;
    }
    int temp=(bitvec[i]%3)<<i; //temp is to save the corresponding bit whose times is greater than three
    ret|=temp;
    
    }
    return ret;
    }
    };
  • 相关阅读:
    Dialog对话框
    Intent的七大属性
    Activity启动模式
    Android知识体系
    Activity生命周期
    Intent实现页面跳转和传值
    Android超链接
    上传文件
    XMLSAX解析
    XmlPull
  • 原文地址:https://www.cnblogs.com/LUO77/p/5623515.html
Copyright © 2011-2022 走看看