【C++】每日一题 137 只出现一次的数字

给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。

你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。

#include <vector>

int singleNumber(std::vector<int>& nums) {
    int ones = 0, twos = 0;
    for (int num : nums) {
        ones = (ones ^ num) & ~twos;
        twos = (twos ^ num) & ~ones;
    }
    return ones;
}

对于每一个整数,由于除了一个元素外,其余每个元素都出现了三次,我们可以考虑统计数组中所有元素的每一位的和并对 3 取模。结果应该是 3 的倍数加上单独出现的那个元素在该位上的值。

因此,我们可以遍历数组中所有元素的每一位,对每一位进行统计。因此定义两个变量 ones 和 twos,分别表示当前位上出现一次和两次的情况。如果某一位上出现了三次,则将 ones 和 twos 中对应的位清零。

最终,ones 中存储的就是只出现一次的那个元素。这样就能在线性时间复杂度和常数空间复杂度内找到只出现一次的元素。

这个算法的时间复杂度为 O(n),其中 n 是数组中元素的个数。算法需要对数组中的每个元素进行遍历,因此时间复杂度与数组的长度线性相关。

空间复杂度为 O(1),即常数级别的空间复杂度。算法只使用了常数个额外变量来存储 ones 和 twos,不随着输入规模的增加而变化。

相关推荐

  1. C++】每日 137 出现数字

    2024-03-26 09:42:04       40 阅读
  2. 每日OJ_位运算⑥_力扣137. 出现数字 II

    2024-03-26 09:42:04       63 阅读
  3. C++每日练——出现数字

    2024-03-26 09:42:04       28 阅读
  4. LeetCode第136 出现数字

    2024-03-26 09:42:04       67 阅读
  5. 136.出现数字

    2024-03-26 09:42:04       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-26 09:42:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-26 09:42:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-26 09:42:04       87 阅读
  4. Python语言-面向对象

    2024-03-26 09:42:04       96 阅读

热门阅读

  1. Day8.

    2024-03-26 09:42:04       39 阅读
  2. 华为OD技术面算法题整理

    2024-03-26 09:42:04       41 阅读
  3. 大模型日报2024-03-25

    2024-03-26 09:42:04       48 阅读
  4. 每个字符最多出现两次的最长子字符串(c++实现)

    2024-03-26 09:42:04       48 阅读
  5. 基于深度学习的图像分类方法

    2024-03-26 09:42:04       44 阅读
  6. Android SO加固技术及其破解方法探讨

    2024-03-26 09:42:04       39 阅读
  7. Android中View和ViewGroup有什么区别和联系

    2024-03-26 09:42:04       40 阅读
  8. Git本地更新仓库改动

    2024-03-26 09:42:04       43 阅读
  9. 取消uniapp的scroll-view滚动条

    2024-03-26 09:42:04       44 阅读
  10. 二进制王国【蓝桥杯算法双周赛】

    2024-03-26 09:42:04       43 阅读
  11. 鲁棒的设计

    2024-03-26 09:42:04       39 阅读