寻找只出现1次的1/2个元素

本文介绍了一种高效算法,用于从数组中找出唯一出现一次的元素。该算法分为两个部分:一是当数组中仅有一个唯一元素时的解决方案;二是处理存在两个唯一元素的情况。通过位运算异或操作实现,巧妙地利用了数学特性来降低时间和空间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

除了1个(或2个)元素只出现一次之外,每个元素都出现两次。

def find_uniq_one(arr):
	xv = 0
	for e in arr:
		xv = xv ^ e
	print( xv )
	
def find_uniq_two_2(arr):
	axorb = 0
	for e in arr:
		axorb = axorb ^ e
	dif = 0
	while(axorb & 1 == 0):
		axorb = axorb >> 1
		dif = dif + 1
	axorb = 1 << dif
	xa, xb = 0, 0
	for e in arr:
		if e & axorb:
			xa = xa ^ e
		else:
			xb = xb ^ e
	print(xa,xb)

if __name__ == "__main__":
        find_uniq_two_2([1,1,2,2,3,4])


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值