题目描述

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
 
 
思路:记住位运算的基本操作,与或非,异或,异或是两个数相同则为0,不同为1,理解为加法运算。一定记住。
还有就是将计算机表示位数定为32位或者64位,这样就可以遍历数的每一位,看是否为1.
这一题属于位运算的题目,两个数如果相同那么异或运算就为0,将一个变量初始化为0,再与其他数进行异或,不会改变结果,记住一定要记住异或是加法运算。
第一遍全部异或后,得到一个数flag,因为flag一定是两个不同的数异或得到的,那么flag等于1的那一位一定可以将这两个数分开,那么我们再用一次异或就分别找到了这两个数。
这题需要注意的是&的优先级比!=低,自己写的时候flag & bitflag != 0,导致想运算后面的!=,程序总是报错,一定要将判断条件加上括号,已经错了几次了。
 
 
记住:位运算就一个非常重要的公式,flag &(flag - 1),会将flag最后一位1去掉,一次flag - flag & (flag - 1)就是最后一个1,比如flag= 3,位表示位0110, flag & (flag - 1)=0100,减去之后0010.
class Solution {
public:
void FindNumsAppearOnce(vector<int> data,int *num1,int *num2) {
int flag = ;
for(int i = ;i < data.size();++i){
flag ^= data[i];
}
int bitflag = ;
bitflag = flag - (flag & (flag - ));
int left = ,right = ;
for(int i = ;i < data.size();++i){
if((data[i] & bitflag) != ){
left ^= data[i];
}
else{
right ^= data[i];
}
}
*num1 = left;
*num2 = right;
}
};

下面的循环就low了,不好,不需要看了。

 
 
class Solution {
public:
void FindNumsAppearOnce(vector<int> data,int *num1,int *num2) {
int flag = ;
for(int i = ;i < data.size();++i){
flag ^= data[i];
}
int bitflag = ;
int time = ;
while(time--){
if((flag & bitflag) != ){
break;
}
bitflag = bitflag << ;
}
int left = ,right = ;
for(int i = ;i < data.size();++i){
if((data[i] & bitflag) != ){
left ^= data[i];
}
else{
right ^= data[i];
}
}
*num1 = left;
*num2 = right;
}
};

39数组中只出现一次的数字+判断的时候一定加上括号,&的优先级低于!=的更多相关文章

  1. 九度OJ 1351 数组中只出现一次的数字

    题目地址:http://ac.jobdu.com/problem.php?pid=1351 题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 输 ...

  2. leetcode 136. Single Number 、 137. Single Number II 、 260. Single Number III(剑指offer40 数组中只出现一次的数字)

    136. Single Number 除了一个数字,其他数字都出现了两遍. 用亦或解决,亦或的特点:1.相同的数结果为0,不同的数结果为1 2.与自己亦或为0,与0亦或为原来的数 class Solu ...

  3. 剑指Offer 40. 数组中只出现一次的数字 (数组)

    题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了偶数次.请写程序找出这两个只出现一次的数字. 题目地址 https://www.nowcoder.com/practice/e02fdb54 ...

  4. 剑指Offer - 九度1351 - 数组中只出现一次的数字

    剑指Offer - 九度1351 - 数组中只出现一次的数字2013-11-23 01:23 题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. ...

  5. 【剑指Offer】40、数组中只出现一次的数字

      题目描述:   一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字.要求时间复杂度为O(n),空间复杂度为O(1).   解题思路:   这道题目相对比较难 ...

  6. 剑指offer:数组中只出现一次的数字

    题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 思路分析: 1. 直接想法,每个数字遍历,统计出现次数,复杂度O(n^2),超时. 2. 借助 ...

  7. 《剑指offer》数组中只出现一次的数字

    本题来自<剑指offer> 数组中只出现一次的数字 题目: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 思路: 思路一:在<剑指of ...

  8. 【剑指Offer】数组中只出现一次的数字 解题报告(Python)

    [剑指Offer]数组中只出现一次的数字 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-intervie ...

  9. 剑指offer-第六章面试中的各项能力(数组中只出现一次的数字)

    题目:输入一个数组,该数组中有两个只出现一次的数字,其他的数字都出现两次,输出出只出现一次的数字. 思路:首先,我们可以将这个数组分成两份,一份里面放一个只出现一次的数字.那么我们该怎么分呢?将整个数 ...

随机推荐

  1. laravel 创建授权策略

    用户只能编辑自己的资料 在完成对未登录用户的限制之后,接下来我们要限制的是已登录用户的操作,当 id 为 1 的用户去尝试更新 id 为 2 的用户信息时,我们应该返回一个 403 禁止访问的异常.在 ...

  2. python opencv:像素操作

    图片的像素 像素:组成图片的单位 RGB:颜色由 RGB三种颜色组成 颜色深度:对于8bit的颜色深度来说,它可以表示的颜色范围是 0 ~ 255,对于RGB图片来说,8位颜色深度可以表示 (2^8) ...

  3. 路由器安全-FPM

    1.FPM(也叫NGACL) FPM是Cisco IOS新一代的ACL,叫做Flexible Packet Matching,灵活的包匹配. 根据任意条件,无状态的匹配数据包的头部,负载,或者全部. ...

  4. JSP页面中关于<c:if test="${...}"><c:if>标签的用法

    代码如下: <td class="showTd_HK" align="center"> <c:if test="${(rwyy01. ...

  5. spark-env.sh增加HADOOP_CONF_DIR使得spark运行文件是hdfs文件

    spark-env.sh增加HADOOP_CONF_DIR使得spark读写的是hdfs文件 刚装了spark,运行wordcount程序,local方式,执行的spark-submit,读和写的文件 ...

  6. laravel nginx下 css 和js 加载 重写规则

    server { listen 80; server_name test.hanwen.com; #charset koi8-r; #access_log logs/host.access.log m ...

  7. 【JAVA算法题】职业抢劫

    题目 /*You are a professional robber planning to rob houses along a street. * Each house has a certain ...

  8. git 删除分支和回退到以前某个提交版本

    1.git 创建和删除分支: 创建:git branch 分支名字 本地删除:git branch -D 分支名字 远程删除:git push origin :分支名字 2.git 回退到以前提交的版 ...

  9. HDU1176免费馅饼(DP)

    都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的10米范围内.馅饼如果掉在了地上当然就 ...

  10. 【剑指Offer面试编程题】题目1361:翻转单词顺序--九度OJ

    题目描述: JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,&quo ...