[LeetCode][总结] 只出现n次的数字(I-II-III...)总结

只出现n次的数字(I-II-III…)总结

LeetCode中「只出现n次的数字…」题有以下几题:

  1. 260. 只出现一次的数字 III
  2. 137. 只出现一次的数字 II
  3. 136. 只出现一次的数字

题意分别是:

  1. 题136给定非空整数序列,只有一个元素(A)只出现一次,其他元素都出现两次,找出出现一次的元素.
  2. 题137给定非空整数序列,只有两个元素(A,B)只出现一次,其他元素都出现两次,找出这两个出现一次的元素.
  3. 题260给定非空整数序列,只有一个元素(A)只出现一次,其他元素都出现三次,找出出现一次的元素.

题解分别是:

  1. 题136,对整个序列进行异或,相同的元素都被抵消,异或结果即为A;
  2. 题137,受题136解法启发,关键点也是采用异或解题,对序列整体做一次异或,异或结果即为A和B的异或,既然A和B不相同,那么只有有一个bit位不同,那么异或结果中任何一个为1的位即可作为区分标志,以此为标志将序列分为两组,即可将题137分解为两个题136来解;
  3. 题260,前两次的解法在此题中不再奏效,因为三次异或的结果依然是数本身。换个思路,我们先讨论32位整数res的第i位(右->左)情况,res(i)由序列每个元素的第i位决定,那么我们可以将第i位取出来,相加,然后对3取余,那么运算结果即为元素A对此位的贡献.

总结:

题137涉及两个对象,题136和题260涉及一个对象,但是我们做完题260后,应该能找到此类题位运算的通解,即直接对对应bit位进行加和运算,这样出现2次,3次乃至4次…N次的问题都可解,即取余(%)消除出现N次的数,剩下的结果即为出现一次的数,然后找出一次的数,即可转化和分解研究对象,解n个研究对象的题。

——————————————
参考资料:
https://www.cnblogs.com/grandyang/p/4263927.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值