当前位置: 首页 > news >正文

【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,不随着输入规模的增加而变化。

http://www.lryc.cn/news/325819.html

相关文章:

  • RAG进阶笔记:RAG进阶
  • 《论文阅读》带边界调整的联合约束学习用于情感原因对提取 ACL 2023
  • 【微服务】接口幂等性常用解决方案
  • RocketMQ学习笔记:零拷贝
  • 3.26日总结
  • 应用日志集成到ElasticSearch
  • MySQL多表联查函数
  • JAVAEE—实现多线程版本的定时器
  • KY228 找位置(用Java实现)
  • 物联网边缘网关有哪些优势?-天拓四方
  • 【C++】6-2 交换函数2 分数 10
  • kafka 01
  • Linux离线安装Docker-Oracle_11g
  • web前端3.19
  • Rust 函数体内能定义数据类型或者做其他什么事情吗?
  • flask_restful结合蓝图使用
  • 干货分享之反射笔记
  • 使用小皮【phpstudy】运行Vue+MySql项目
  • 局部静态变量实现单例模式,线程安全(推荐使用)c++11
  • Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
  • Mybatis-Plus——09,代码自动生成器
  • Temu api接口 获取商品详情 数据采集
  • 安捷伦Agilent N1912A功率计
  • ES 进阶知识
  • ChatGPT 对 ELT的理解
  • qt事件机制学习笔记
  • 网红电商主播培养体系招聘管理制度孵化方案
  • Android获取经纬度的最佳实现方式
  • 芒果YOLOv8改进137:主干篇CSPNeXt,小目标检测专用,COCO数据集验证,协调参数量和计算量的均衡,即插即用 | 打造高性能检测
  • 【测试开发学习历程】认识Python + 安装Python