1-1000这1000个数放在含有1001个元素的数组中,只有唯一个元素重复,其他均只出现一次。每个数组元素,只能访问一次,设计一个算法,将其找出来,不用辅助储存空间,能否设计一个算发实现
位运算解题
import random a = [] n = 1001 for i in range(n-1): a.append(i+1) print(a) b = random.randint(0,n-2) a.insert(a[b],random.randint(1,n-1)) print(a) x1 = 0 for i in range(n): x1 = x1^i for i in range(n): x1 = x1^a[i] print(x1)
验证方法,用辅助储存空间
import random a = [] n = 1001 for i in range(n-1): a.append(i+1) print(a) b = random.randint(0,n-2) a.insert(a[b],random.randint(1,n-1)) print(a) print("=====================") a1 = [] for i in range(n): a1.append(0) # 创建一个长度为n 的数组,所有的值都为0 for i in range(n): a1[a[i]] +=1 # 遍历数组a 数组[i]的值对应数组a1的位置,将该位置的值加1 for i in range(n): if a1[i] == 2: print(i) break
一个数组里除了某一个数字之外,其他的数字都出现了两次,请写一个程序找出这个数只出现一次的数字
# 两个相同的数做位运算结果为0 import random n = 10 a = [] for i in range(n): a.append(i+1) a.append(i+1) b = random.randint(1,2*n-1) a.pop(b) print(a) x = 0 for i in a: x = x^i print(x)