本题要求实现一个找出整型数组中最大值的函数。_Day40:数组中只出现一次的数字...

这篇博客介绍了如何解决找出整型数组中只出现一次的数字的问题,提供了四种不同的实现方法:异或运算、哈希表、字典统计和count函数。通过这些方法,博主强调了在解决问题时要尝试多种思路,拓展思维,以写出更优的代码。
摘要由CSDN通过智能技术生成

2f4e206d65a809d72328b7106de3bc1a.png

剑指Offer_编程题——数组中只出现一次的数字

题目描述:

一个整型数组里除了两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。

具体要求:

时间限制: C/C++ 1秒,其他语言2秒
空间限制: C/C++32M,其他语言64M

具体实现:

思路一:

如果把数组中的所有数字都依次异或一遍,则可以消掉成对出现的数字,那么还有两个数字是单一的,肯定也不同,那么最终异或的结果肯定不是0。表示在二进制中肯定有一位是1,那么两个不同的数字,一定有一个在该位为1,另一个在该位为0。如果将整个数组按照该位是否为1分为两部分,那么这两部分各自包含一个单一数字。这里实现这个就需要设置一个flag标志位,通过对其**左移动来实现。flag<<= 1;或者是flag=flag*2;分为两部分的数组,分别异或,最终结果就是这两个数。这里需要注意的是这个flag就是我们一个额外的条件,按照条件查找,边查找,边异或就行了。具体用Java实现如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值