剑指 Offer 56 - I. 数组中数字出现的次数

news/2025/1/12 3:54:05/

题目要求时间复杂度是O(n),空间复杂度是O(1)。

异或可以将两个只出现一次的数筛选出来,之后再把这两个数分到两组中,并且将相同的数分到同一组,两组分别异或就能求出两个数。
异或规则是不相同为1,相同为0
所以利用a^b 的结果中为1的某一位作为判断依据

class Solution {
public:vector<int> singleNumbers(vector<int>& nums) {int res=0,a=0,b=0;for(int i:nums){res^=i;}int div=1;//判断依据while((div&res)==0){div=div<<1;}for(int i:nums){//因为a,b不同  所以和div与运算会有不同结果if(div&i){// cout<<"aaaa "<<i<<endl;a^=i;}else{// cout<<"bbbb "<<i<<endl;b^=i;}}return vector<int>{a,b};}
};

剑指 Offer 56 - II. 数组中数字出现的次数 II

将所有数的每一位出现的次数相加 最终结果为3的倍数或者3的倍数余1
所以我们找出3的倍数余1的所有位就是出现一次的数

因为有些数出现三次 所以我们把三次用三种状态表示出来 分别为 00 01 10
出现次数相加 最后状态为 00或01 ‘也就是说我们要找出01状态的所有位

我们用one和two来表示 初始化one和two为0 表示00状态
比如说 n=3

n0011
two0000
one0011

为什么最后返回one
因为最终状态为01 two这一位为0 所以只要返回one就行了

class Solution {
public:int singleNumber(vector<int>& nums) {int one=0,two=0;for(int i:nums){one=one^i&~two;two=two^i&~one;}return one;}
};

http://www.ppmy.cn/news/10440.html

相关文章

vitepress(三):自动生成目录

上一节我们将自己的网站发布到了git pages上&#xff0c;但是现在我们需要每次更新一篇文章就重写一次目录&#xff0c;操作上十分的繁琐和不方便&#xff0c;所以我们需要一个方法去自动生成我们的侧边栏结构&#xff0c;方便我们每次只需要更新我们的项目即可。这里我们要知道…

机器学习(4)——周志华

归纳偏好 若非必要&#xff0c;勿增实体 若多个算法都能解决同一个问题&#xff0c;则选取最简单的算法 当前什么样的偏好与问题更匹配&#xff0c;必须对问题有一个清楚的认识

WSL2下安装MESA / OSMESA驱动

找不到的命令可以在这里找https://command-not-found.com/ 写在最前面 如果你和我一样是在用pyrender的时候遇到了以下问题&#xff0c;并且在试了以下方法代码仍然报莫名其妙错误的时候&#xff0c;请通过pip 把pyrender pyopengl 都升到最新版&#xff0c;可以无视pyrender…

【AcWing周赛】AcWing第85场周赛

目录 <一>Acwing 4791. 死或生 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 <二>Acwing 4792. 最大价值 一、题目 1、原题链接 2、题目描述 二、解题报告&#xff1a; 1、思路分析 2、时间复杂度 3、代码…

【华为机试真题详解】获得完美走位【2022 Q4 | 100分】

文章目录 前言题目描述输入描述输出描述示例 1示例 2题目解析参考代码优化前言 《华为机试真题详解 Python实现》专栏含牛客网华为专栏、华为面经试题、华为OD机试真题。 如果您在准备华为的面试,期间有想了解的可以私信我,我会尽可能帮您解答,也可以给您一些建议! 本文解…

C语言-指针进阶-函数指针数组应用-计算器(9.2)

目录 1. 函数指针 2. 函数指针数组 2.1函数指针数组的定义 2.2函数指针数组应用 3. 指向函数指针数组的指针 思维导图&#xff1a; 1. 函数指针 直接上代码&#xff1a; #include <stdio.h>void test() {printf("hehe\n"); }int main() {printf("%…

【卷积码系列4】卷积码的状态转移函数、距离谱和译码性能界分析及matlab仿真

一、卷积码的状态图和转移函数 以一个例子入手,对于如下编码器所示的码率1/3卷积码 根据输入和寄存器状态,可以得到其状态图如下所示 图中虚线表示输入比特为1时的转移,而实线表示输入比特为0时的转移 同样,图中虚线表示输入比特为1时的转移,而实线表示输入比特为0…

云收藏系统|基于Springboot实现云收藏系统

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路 关注作者有好处 文末获取源…