zoukankan      html  css  js  c++  java
  • [LeetCode] Single Number II

    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?

    思路:

    (所有数的第i位之和)mod 3 = (查找的数的第i位),其中 i = 1,2,...,sizeof(int)*8。

    如下算法:如果在你的机器上int是32位,则时间复杂度是O(32n),即线性时间,空间复杂度O(1)

    注:

    一个数与1(000001)相与得到此数最末位;

    一个数与2(000010)相与得到此数次末位;

    依次类推,即一个数与相应权重相与得到此数在本权重位的值。

    class Solution {
    public:
        int singleNumber(int A[], int n) {
            
            int bits = sizeof(int)*8;
            int weight = 1,result=0;
    
            for(int i =0;i<bits;i++)
            {
               int sum = 0;
               for(int j=0;j<n;j++)
               {
               
                 sum += (A[j] & weight)/weight;  // 每个数与权值weight相与得到这个数在权值位上的值,比如weight=2,本句sum得到所有数第2位之和。
               
               }
               result += (sum % 3)*weight; //sum % 3得到要查找的数的权值位的值,再乘权值,就是查找数在权值位代表的真实值。
               weight *= 2;
            
            }
    
            return result;
        }
    };
  • 相关阅读:
    安卓性能优化总结
    Splash广告界面
    安卓实现版本升级
    Kotlint集合简单总结
    Kotlin在处理GET和POST请求的数据问题
    udp 局域网群聊
    java 网络编程
    关于软件工程的课程建议
    结对编程--四则运算
    简单的结对代码练习
  • 原文地址:https://www.cnblogs.com/Xylophone/p/3779517.html
Copyright © 2011-2022 走看看