题目描述

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。

题目分析

剑指Offer(纪念版)P211

① 自己与自己异或为0

② 0与数A异或为A

③ 异或满足交换律

代码实现

void FindNumsAppearOnce(int data[], int length, int* num1, int* num2)
{if (data == NULL || length < 2)return;int resultExclusiveOR = 0;for (int i = 0; i < length; ++ i)resultExclusiveOR ^= data[i];unsigned int indexOf1 = FindFirstBitIs1(resultExclusiveOR);    *num1 = *num2 = 0;for (int j = 0; j < length; ++ j){if(IsBit1(data[j], indexOf1))*num1 ^= data[j];else*num2 ^= data[j];}
}// 找到num从右边数起第一个是1的位
unsigned int FindFirstBitIs1(int num)
{int indexBit = 0;while (((num & 1) == 0) && (indexBit < 8 * sizeof(int))){num = num >> 1;++ indexBit;}return indexBit;
}// 判断数字num的第indexBit位是不是1
bool IsBit1(int num, unsigned int indexBit)
{num = num >> indexBit;return (num & 1);
}

  

转载于:https://www.cnblogs.com/xwz0528/p/4896200.html

面试题40:数组中只出现一次的数字相关推荐

  1. 剑指offer面试题[40]-数组中只出现一次的数字

    题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 注意原题目要求空间复杂度为0(1). 位运算的具体思路可以参看剑指offer. class So ...

  2. 【剑指offer-Java版】40数组中只出现一次的数字

    数组中只出现一次的数字:输入一个数组,该数组中有两个数字只出现了一次,其他数字都出现了两次,求出这两个只出现了一次的数字 要求时间复杂度为O(n)空间复杂度为O(1) 考虑一个数组中只有一个数字仅仅出 ...

  3. 【难题+重点】剑指offer——面试题40:数组中只出现一次的数字

    剑指offer--面试题40:数组中只出现一次的数字 Solution1: 书中展示了很棒的思路: 关于异或的两个性质应该知道: (1) X^X = 0; (2) X^0 = X; class Sol ...

  4. 40:数组中只出现一次的数字

    /*** 面试题40:数组中只出现一次的数字* 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字.*/ public class _40_num_one_ti ...

  5. 《剑指offer》-- 第一个只出现一次的字符、数组中只出现一次的数字、字符流中第一个不重复的字符、数组中重复的数字

    一.第一个只出现一次的字符: 1.题目: 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写 ...

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

    本文首发于我的个人博客:尾尾部落 题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了偶数次.请写程序找出这两个只出现一次的数字. 解题思路 法一:大家都能想到的HashMap法 法二:异或法 ...

  7. 牛客题霸 [数组中只出现一次的数字] C++题解/答案

    牛客题霸 [数组中只出现一次的数字] C++题解/答案 题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 题解: 用map来记录每个数字出现几次, ...

  8. 数组中只出现一次的数字

    一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 数字都出现两次,则异或肯定为0. 考虑下这个题目的简化版--数组中除一个数字只出现1次外,其它数字都成对出 ...

  9. 【剑指offer】面试题40:数组中只出现一次的数字

    题目: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 思路: 因为只有两个只出现一次的数字,所以所有数字进行异或之后得到值res一定不是0.这样,res ...

最新文章

  1. 2022-2028年中国硅藻土产业发展态势及市场发展策略报告
  2. Opencv中cvCopy() 和cvCloneImage()的区别
  3. 高程 第6章面向对象的程序设计 6.1 理解对象
  4. 运用Handler.post()方法进行数据更新跟用Message对比(18)
  5. 兑吧:游戏化玩转用户运营的三驾马车
  6. 所有受限制的应用程序包_【译】使用Blazor构建桌面应用
  7. flex上传图片到java服务器
  8. matlab神经网络工具箱创建神经网络,matlab神经网络工具箱创建神经网络
  9. 【Hook】postman工具的代码生成工具让它锦上添花
  10. android动态添加的页面怎么加功能_Android跳转应用安装页面
  11. 【C++编程题2】字符串插入空格
  12. 前端内存优化的探索与实践
  13. 作者:Anjaneyulu Passala, 男,印度理工学院计算机科学与工程学院博士,印孚瑟斯技术有限公司主任研究科学家。...
  14. [Git] Ubuntu 上更新 git
  15. Excel函数实战技巧精粹(四)常用函数之COUNTIF和SUMIF详解
  16. 中国大陆IP过滤器-Java实现
  17. java实现多种格式视频上传、转码、播放、下载工具类
  18. 测不准原理(还真有此事?)
  19. 2019配电安规电子版_2018年配电安规.docx
  20. 计算机美术教学应用,浅谈计算机在美术教学中的应用

热门文章

  1. 单光子探测技术应用_我如何最终在光学/光子学应用程序中使用机器学习作为博士学位
  2. 网贷,高利贷,套路贷为什么必须铲除?
  3. 稀疏傅里叶变换(sparse FFT)
  4. 同盟与对抗:谈《少女杜拉的故事》中的治疗关系(转)
  5. heap与stack区别
  6. 数字图像处理技术详解程序_大学专业详解系列135——数字媒体技术(工学学士)...
  7. 航天金税 接口_用友凭证接口可以实现数据之间无缝对接和打通
  8. 三角形一点到三边距离最小_初中数学:相似三角形以及重心、向量问题考点整理...
  9. python编写统计选票的程序_使用python编写微信公众号发稿统计程序
  10. dijkstra算法_Python实现图的经典DFS、BFS、Dijkstra、Floyd、Prim、Kruskal算法