在 Python 中使所有段的 XOR 为零的程序
假设我们有一个名为nums的数组和另一个值k。段[left,right](left<=right)的XOR是索引在左右(包括)之间的所有元素的XOR。
我们必须找到数组中要更改的最小元素数,以便所有大小为k的段的XOR都为零。
因此,如果输入类似于nums=[3,4,5,2,1,7,3,4,7],k=3,那么输出将为3,因为我们可以修改索引2,3处的元素,4使数组[3,4,7,3,4,7,3,4,7]。
示例
让我们看下面的实现来更好地理解
def solve(nums, k):
LIMIT = 2**10
temp = [[0 for _ in range(LIMIT)] for _ in range(k)]
for i,x in enumerate(nums):
temp[i%k][x] += 1
dp = [-2000 for _ in range(LIMIT)]
dp[0] = 0
for row in temp:
maxprev = max(dp)
new_dp = [maxprev for _ in range(LIMIT)]
for i,cnt in enumerate(row):
if cnt > 0:
for j,prev in enumerate(dp):
new_dp[i^j] = max(new_dp[i^j], prev+cnt)
dp = new_dp
return len(nums) - new_dp[0]
nums = [3,4,5,2,1,7,3,4,7]
k = 3
print(solve(nums, k))输入
[3,4,5,2,1,7,3,4,7], 3输出结果
-9
热门推荐
10 天气转凉祝福语简短
11 许愿星姐妹祝福语简短
12 足球队祝福语简短
13 过节文案成语祝福语简短
14 生病祝福语简短文案
15 祝福语怎么写大全简短
16 亲姐姐祝福语简短英文
17 简短霸气的考试祝福语
18 拜年啦祝福语大全简短