Leetcode Single Number II (面试题推荐)

简介: 给你一个整数数组,每个元素出现了三次,但只有一个元素出现了一次,让你找出这个数,要求线性的时间复杂度,不使用额外空间。

还记得《剑指offer》和《编程之美》等书上多次出现的找一个数组中只出现一次的数那个题吗?


   leetcode也有这道题 链接here  相信大家都知道用异或在O(n)的时间复杂度内求出的方法,这里不再赘述。


下面就是上题的升级版


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?


  给你一个整数数组,每个元素出现了三次,但只有一个元素出现了一次,让你找出这个数,要求线性的时间复杂度,不使用额外空间。


  这样就不能使用异或的方法了,把所有元素以后得到的就是所有元素的异或值了,对我们没有任何帮助。


  这个问题依旧使用位运算来解决,不过更加复杂。


  我们用三个变量one two three,分别存储二进制未分别出现一次 两次 三次的位。

class Solution {
public:
    int singleNumber(int A[], int n) {
        int one = 0, two = 0, three = 0;
        for(int i = 0; i < n; i++)
        {
            three = two & A[i];                    //出现三次的位肯定是由出现两次的得到的
            two = two | ones & A[i];          //出现两次的肯定是出现一次的得到的,不过还有原有的所以要或
            one = one | A[i];                       //计算出现一次的位  
            two = two & ~three;               //去掉二进制中出现三次的位
            ones = one & ~three;               //去掉二进制中出现三次的位</span>
        }
        return one;                                     //最终twos three都为0,one就是我们要的答案
    }
};
目录
相关文章
|
11天前
|
Java
【LeetCode力扣】面试题 17.14. 最小K个数(top-k问题)
【LeetCode力扣】面试题 17.14. 最小K个数(top-k问题)
17 1
|
11天前
|
存储 算法
【LeetCode力扣】单调栈解决Next Greater Number(下一个更大值)问题
【LeetCode力扣】单调栈解决Next Greater Number(下一个更大值)问题
8 0
|
11天前
|
算法
【刷题】 leetcode 面试题 08.05.递归乘法
递归算法是一种在计算机科学和数学中广泛应用的解决问题的方法,其基本思想是利用问题的自我相似性,即将一个大问题分解为一个或多个相同或相似的小问题来解决。递归算法的核心在于函数(或过程)能够直接或间接地调用自身来求解问题的不同部分,直到达到基本情况(也称为基础案例或终止条件),这时可以直接得出答案而不必再进行递归调用。
29 4
【刷题】 leetcode 面试题 08.05.递归乘法
|
11天前
|
存储 算法 安全
【刷题】 leetcode 面试题 01.06 字符串压缩
来看效果: 非常好!!!过啦!!!
30 5
【刷题】 leetcode 面试题 01.06 字符串压缩
|
11天前
|
C++ 索引
【力扣经典面试题】14. 最长公共前缀
【力扣经典面试题】14. 最长公共前缀
|
11天前
|
C++
【力扣经典面试题】58. 最后一个单词的长度
【力扣经典面试题】58. 最后一个单词的长度
|
11天前
|
算法 Java
【力扣经典面试题】12. 整数转罗马数字
【力扣经典面试题】12. 整数转罗马数字
|
11天前
|
索引
[经典力扣面试题]135. 分发糖果
[经典力扣面试题]135. 分发糖果
|
11天前
|
算法 C++ 索引
【力扣经典面试题】238. 除自身以外数组的乘积
【力扣经典面试题】238. 除自身以外数组的乘积
|
11天前
|
算法 索引
【力扣经典面试题】274. H 指数
【力扣经典面试题】274. H 指数

热门文章

最新文章