【难题+重点】剑指offer——面试题40:数组中只出现一次的数字
剑指offer——面试题40:数组中只出现一次的数字
Solution1:
书中展示了很棒的思路:
关于异或的两个性质应该知道:
(1) X^X = 0;
(2) X^0 = X;
class Solution {
public:void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) { //data是整型数组,num1和num2是两个只出现一次的数字if(data.size() < 2)return;int Res_All_XOR = 0, res_one = 0, res_two = 0;for(int i = 0; i < data.size(); i++)Res_All_XOR ^= data[i];int first_bit_1 = FindFirstBit1(Res_All_XOR);for(int i = 0; i < data.size(); i++) {if(IsBit1(data[i], first_bit_1))res_one ^= data[i];else res_two ^= data[i];}*num1 = res_one;*num2 = res_two;return;}int FindFirstBit1(int n){ //找到第一位是1的位置int count = 0;while(n != 0) {if(n%2 == 1){count++;return count;}else {count++;n /= 2;}}return 0;}bool IsBit1(int n, int k){ //判断n的第k位是否是1,true or falseint temp = n >> (k-1);if(temp%2 == 1)return true;else return false;}
};
【难题+重点】剑指offer——面试题40:数组中只出现一次的数字相关推荐
- 剑指offer面试题[40]-数组中只出现一次的数字
题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 注意原题目要求空间复杂度为0(1). 位运算的具体思路可以参看剑指offer. class So ...
- 【剑指offer-Java版】40数组中只出现一次的数字
数组中只出现一次的数字:输入一个数组,该数组中有两个数字只出现了一次,其他数字都出现了两次,求出这两个只出现了一次的数字 要求时间复杂度为O(n)空间复杂度为O(1) 考虑一个数组中只有一个数字仅仅出 ...
- 剑指 Offer II 070. 排序数组中只出现一次的数字
找出那只单身狗: 正文开始@Assassin 目录: 找出那只单身狗: 1. 题目描述: 2. 思路: 2.1 异或的基本概念: 2.1.1 符号表示: 2.1.2 运算规则: 2.1.3 异或的性质 ...
- 剑指offer面试题[29]-数组中出现次数超过一半的数字
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...
- 剑指Offer - 面试题51. 数组中的逆序对(归并排序,求逆序对)
1. 题目 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 示例 1: 输入: [7,5,6,4] 输出: 5限制: 0 ...
- 剑指Offer - 面试题3. 数组中重复的数字(哈希)
1. 题目 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组 ...
- 剑指offer 面试题03. 数组中重复的数字
找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一个重 ...
- 剑指offer面试题[36]-数组中的逆序对
题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000 ...
- 剑指offer面试题[51]-数组中重复的数字
题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为 ...
- 剑指offer面试题39. 数组中出现次数超过一半的数字(数组)(摩尔投票法)
题目描述 **数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 你可以假设数组是非空的,并且给定的数组总是存在多数元素.** 思路 详见链接 代码 class Solution:def ...
最新文章
- 志澄观察:卫星互联网——太空经济新动力
- 阿里基础设施技术亮相SIGCOMM 2018
- mysql删除不存在行数据报错_MySQL学习笔记11复制错误处理(二)删除不存在的行的问题...
- 假设一动态集合S用一个长度为m的直接寻址表T来表示。请给出一个查找S中最大元素的过程。(算法导论第十一章11.1-1)
- java多参方法_Java中多参数方法进阶
- react native android6+拍照闪退或重启的解决方案
- Unity3d接入视频监控
- 测试驱动javascript开发 -- 3.测试驱动开发过程(上)
- Rize - 一个可以让你简单、优雅地使用 puppeteer 的 Node.js 库
- rhce考试试题以及答案_RedHat红帽认证 RHCE 7.0题库和答案
- Java-集合练习题(1)
- 都能看懂的嵌入式linux/android alsa_aplay alsa_amixer命令行使用方法
- IntelliJ IDEA中项目界面右上角中没有SVN工具按钮
- 请把西游记倒过来看!
- 为啥214被塞狗粮的单身汪,520还会被塞狗粮
- 跑步时戴什么耳机好、分享五款最适合跑步的运动耳机排名清单
- 中型仓储货架是使用三立柱货架好,还是使用两立柱货架好?
- STM32之BKP原理
- 模糊图片(动漫)转高清 (aardio GUI),优质图片处理软件
- C语言之复合类型下卷(十九)(自然法则)(2023)
热门文章
- python---之os.path.splitext(“文件路径”)
- pytorch-tensorflow版本选择-cuda8-cudnn5.1
- 【字符串】面试题之奇偶字符串分离
- 华为在鸿蒙的另一张王牌,华为的这两张王牌,将助力Mate40系列角逐安卓机皇的位置...
- linux如何退出python编辑器_怎么退出python
- 新版linux系统主机最低配置,Linux系统初始配置标准化
- python立即关机_“python怎么控制计算机关机“python自动关机教程
- 百度竞价排名曝光_企业入驻百度爱采购必须选好本地运营服务商
- 计算机网络中enable,第一章 计算机网络结构概述1、 enable# conf
- mysql job status_检查SQL Server Job状态