博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第六十一题(找出数组中两个仅仅出现一次的数字)
阅读量:6586 次
发布时间:2019-06-24

本文共 1043 字,大约阅读时间需要 3 分钟。

题目:一个整型数组里除了两个数字之外,其它的数字都出现了两次。

请敲代码找出这两个仅仅出现一次的数字。

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

思路:先对全部数据进行异或得到结果result,两两同样的数据异或结果为0。因此result为两个仅仅出现1次的数字异或的结果,求得result左边第一个值为1的位,依据异或的性质可知,这两个仅仅出现一次的数字该位上的值肯定不同,一个为0,一个为1。以此为标准。对整个数组中的该位为1的数字进行异或。同样的数字两两消去,得到的结果为该位为1的仅仅出现了一次的数字,同理求得还有一个数字。

C++代码:

#include "stdafx.h"#include
namespace MS100P_61{ void findTwoSingle(int data[],int length) { int result=0; for (int i = 0; i < length; i++) result = result^data[i]; int bitIndex; for (bitIndex = 0; bitIndex < 8 * sizeof(int); bitIndex++) { if (result&(1 << bitIndex)) break; } result = 0; for (int i = 0; i < length;i++) if (data[i] & (1 << bitIndex)) result = result^data[i]; cout << "one number is:" << result << endl; result = 0; for (int i = 0; i < length; i++) if (!(data[i] & (1 << bitIndex))) result = result^data[i]; cout << "the other is:" << result << endl; } void test() { int A[] = {3,3,2,2,12,12,7,-1}; findTwoSingle(A, 8); }}int _tmain(int argc, _TCHAR* argv[]){ MS100P_61::test(); return 0;}
执行结果:

你可能感兴趣的文章
CSS3+JS实现静态圆形进度条【清晰、易懂】
查看>>
关于树形插件展示中数据结构转换的算法
查看>>
angular2系列之动画-路由转场动画
查看>>
使用 Rust 构建分布式 Key-Value Store
查看>>
shadow-cljs: JavaScript 依赖的实践
查看>>
图片加载框架之Fresco
查看>>
聊聊spring for kafka对consumer的封装与集成
查看>>
es6-let const
查看>>
babel-preset-env
查看>>
docker运行storm及wordcount实例
查看>>
对蚊子个人博客进行了彻底的改造
查看>>
mysql查询与索引优化2
查看>>
沪江前端由H5页面引起的一场前端数据结构讨论
查看>>
说说VNode节点(Vue.js实现)
查看>>
iOS-从三维立方体到理解CATransform3D&CGAffineTransform&m34
查看>>
FastD 最佳实践二: 构建配置中心
查看>>
CSS 自定义属性 -- 使用 JS 和不使用 JS
查看>>
laravel 模型事件几种用法
查看>>
UILabel「行距,首行缩进」
查看>>
Https下字体文件无法加载的解决方案
查看>>