欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

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

发布时间:2025/5/22 编程问答 35 豆豆
生活随笔 收集整理的这篇文章主要介绍了 《剑指offer》-数组中只出现一次的数字 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
/* 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。思路: 如果是只有一个数字出现一次,那么所有数字做异或就得到结果; 现在有两个数字x,y分别出现一次,其他数字出现两次,那么所有数字异或的结果是result = x^y x^y肯定不等于0,那么找其二进制表示中不等于0的一个位,比如从右到左第一个位置好了,那么用这个位置能区分开来这两个数字,以及其他的数字,每两个一样的数字都处于同一边。 */ class Solution { public:void FindNumsAppearOnce(vector<int> data, int* num1, int *num2) {int res = data[0];for (int i = 1; i < data.size(); i++){res = res ^ data[i];}int cnt = 0;while (res % 2 != 1){res = res >> 1;cnt = cnt + 1;}*num1 = *num2 = 0;for (int i = 0; i < data.size(); i++){if ((data[i] >> cnt) & 1){*num1 ^= data[i];}else{*num2 ^= data[i];}}} };

总结

以上是生活随笔为你收集整理的《剑指offer》-数组中只出现一次的数字的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。