文章目录

  • 136. 只出现一次的数字
  • 137. 只出现一次的数字 II
  • 260. 只出现一次的数字 III

136. 只出现一次的数字

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例 1:

输入: [2,2,1]
输出: 1

示例 2:

输入: [4,1,2,1,2]
输出: 4

通过位运算,我们知道:

思路:
基于异或的性质,
我们可以直接将全部元素异或。
这样的话,结果就是0异或x,就得出了x的值。

int singleNumber(int* nums, int numsSize)
{int ret = 0;for(int i = 0;i<numsSize;i++){ret^=nums[i];}return ret;
}

137. 只出现一次的数字 II

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

示例 1:

输入:nums = [2,2,3,2]
输出:3

示例 2:

输入:nums = [0,1,0,1,0,1,99]
输出:99

思路
如果我们在每个二进制位上进行加减,
由于其他数字都是3个,对他们的和取余为0.

这样的话我们可以得出单独的数x的每一个二进制位,
利用左移即可求出x。

int singleNumber(int* nums, int numsSize)
{int i = 0;
int j = 0;
int sum = 0;
for(i = 0;i<32;i++)
{size_t count = 0;for(j=0;j<numsSize;j++){count+=(nums[j]>>i)&1;}sum+=(count%3)<<i;
}
return sum;
}

260. 只出现一次的数字 III

给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。

进阶:你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?

示例 1:

输入:nums = [1,2,1,3,2,5]
输出:[3,5]
解释:[5, 3] 也是有效的答案。

示例 2:

输入:nums = [-1,0]
输出:[-1,0]

示例 3:

输入:nums = [0,1]
输出:[1,0]

思路
得到上一题的启示,我们是不是还可以用位运算来解题呢?
如果数组是由很多组一对数字一个单独的数字x组成,
我们仍可以全部异或。
但是本题是两个单独的数字,
我们自然想到了将这群数字分成两组,然后使用异或。

在所有元素中,取二进制第x位为1的元素全部异或,就可以得出一个单独的数字x。

由于一开始就得出了所有元素异或的结果x异或y,
现在又有了x,自然可以求出y。
代码如下:

int* singleNumber(int* nums, int numsSize, int* returnSize)
{所有元素异或int ret = 0;for(int i = 0;i < numsSize;i++){ret^=nums[i];}寻找二进制位中的1,下标存入posint pos = 0;for(int i = 0;i < 32;i++){if((ret>>i)&1==1){pos = i;break;}}int single_1=0;int single_2=0;分组,求single_1for(int i = 0;i < numsSize;i++){if((nums[i]>>pos)&1==1){single_1^=nums[i];}}//利用single_1和ret求出single_2single_2=single_1^ret;*returnSize=2;int *ans=malloc(sizeof(int)*2);ans[0]=single_1;ans[1]=single_2;return ans;
}
  • 时间复杂度:O(n)。
  • 空间复杂度:O(1)。

图解

 int ret = 0;for(int i = 0;i < numsSize;i++){ret^=nums[i];}int pos = 0;for(int i = 0;i < 32;i++){if((ret>>i)&1==1){pos = i;break;}}

 int single_1=0;int single_2=0;for(int i = 0;i < numsSize;i++){if((nums[i]>>pos)&1==1){single_1^=nums[i];}}single_2=single_1^ret;

以上就是今天位运算的全部内容了。

位运算:【leedcode:只出现一次的数字】相关推荐

  1. 位运算使奇数+1 偶数-1_C ++程序检查数字是奇数还是偶数

    位运算使奇数+1 偶数-1 Below I have shared the C++ program to check a number is odd or even. 下面我共享了C ++程序来检查数 ...

  2. LeetCode-位运算-36. 只出现一次的数字

    136. 只出现一次的数字 思路一:异或,当不同的数异或肯定会保留下来,相同的数异或之后,就会相互抵消. class Solution {public:int singleNumber(vector& ...

  3. Java位运算之2的N次幂、整数转换、寻找只出现一次的数

    Java位运算 位运算:只能对整数进行位运算,可加快计算机计算速度.因为所有数在内存中都是以二进制存放,故直接对数的二进制位进行操作非常快,比如乘法.除2操作:通过左右移二进制位即可,无需将数转为十进 ...

  4. 位运算实现用户留存率

    统计留存率之前先弄清一下留存率的概念,百度百科中是这么说的: 用户在某段时间内开始使用应用,经过一段时间后,仍然继续使用应用的被认作是留存: 这部分用户占当时新增用户的比例即是留存率,会按照每隔1单位 ...

  5. LeetCode 318. 最大单词长度乘积(位运算)

    1. 题目 给定一个字符串数组 words,找到 length(word[i]) * length(word[j]) 的最大值,并且这两个单词不含有公共字母.你可以认为每个单词只包含小写字母.如果不存 ...

  6. 全面解读Math对象及位运算

    <p>本文转载自:<a href="https://segmentfault.com/a/1190000008786789" title="全面解读Ma ...

  7. CH0104 起床困难综合症(位运算典例)

    传送门:起床困难综合症 思路:要知道位运算永远只会改变本位,与其它位泾渭分明.据此,我们不难看出,每个位仅有1.0两种状态,在全部运算后,寻找两种状态的最大结果即可. #include<cstr ...

  8. C .Adding Powers codeforces(位运算思维)

    outputstandard output Suppose you are performing the following algorithm. There is an array v1,v2,-, ...

  9. 数据结构与算法XS班-左程云第一节课笔记(位运算、算法是什么、简单排序)

    第1节 位运算.算法是什么.简单排序 ##这是数据结构与算法新手班-左程云第一节课的笔记## 1. 位运算 // 你们会不会表示一个数字的32位啊? // Java中int类型默认以32位二进制数在计 ...

  10. [Leedcode][JAVA][第136题][第137题][只出现一次的数字][位运算][HashSet][HashMap]

    [问题描述][第136,137题][只出现一次的数字] 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了N次.找出那个只出现了一次的元素.[第136题]N= 2 输入: [2,2 ...

最新文章

  1. 基于Oracle11gR2 GRID的单实例库备份恢复
  2. Nagios配置文件上传
  3. 腾讯、百度、阿里、微软面试题精选(不断更新)
  4. GridView合并列下的行单元格的方法
  5. 识别产品外观的合格软件_产品外观质量视觉检测系统.PDF
  6. 【博士招生】卢森堡大学​SnT(CVI²)研究小组,DeepFake 检测领域
  7. CentOS网络配置解决方案
  8. JavaWeb学习笔记
  9. 通过 百度网盘 分享文件
  10. 【云周刊】第121期:图管够!灌篮高手、女儿国…阿里日,这帮程序员太会玩了!
  11. 会员积分系统的四大元素
  12. 《预告 》 明天(9月19日),中国科学院自动化研究所首届智能决策论坛即将开幕!(附带10+位作者演讲主题及摘要)...
  13. 强子老师python_强子老师分享:深度分析维生素C
  14. nginx配置和优化详解
  15. IOS开发-画曲线画弧线画圆
  16. 魔兽任务分类及游戏任务系统设计启示
  17. 【备忘】传智播客ios第五期
  18. 软件开发中的需求分析
  19. 半导体分立器件静态参数测试系统 DCT1401 天光测控
  20. 【githubgirl】自主导航无人机的硬件组成与搭建方案

热门文章

  1. win10专业版和企业版的区别_Win10专业版和家庭版有什么区别?Win10家庭版和专业版区别对比...
  2. Secure CRT 用域名连接虚拟机的详细步骤
  3. Rockchip瑞芯微UART调试指南
  4. here i am(歌手BryanAdams的歌曲)
  5. JWT全面解读、详细使用步骤
  6. 计算机网络带宽是什么意思,带宽是什么有什么意义
  7. [转]4款手机音乐播放器对比
  8. android自动修音,唱吧自动一键修音软件-唱吧自动修音app8.8.6 安卓手机版-东坡下载...
  9. JQuery广告(新闻)浮动(漂浮)框
  10. 基于SPSS的医疗医保费用数据分析预测(C#)