如何优化Xor Key问题的给定python3解决方案

问题描述

我正在尝试解决此problem。首先,我创建一个列表,列出所有可能的16位数字bitset。 我将输入列表x的元素索引存储到bitsetbitset[i]在输入列表x中包含i的索引)。显然,并非bitset的所有元素都具有值。我将allset分配给所有位均已设置的数字(此处为2 ** 16-1)。 ideal是一个数字,考虑到所有数字均为16位,则在与给定数字进行异或运算时将给出最大异或。我们遍历所有可能的数字ideal^i,其中我从0到allset。显然,存在于输入数组x中且索引在给定范围内的第一个ideal^i将使我们获得最大xor。这是上述方法的python3实现:

#!/bin/python3

import os
import sys


def xorKey(x,queries):
    ans = []
    bitset = [None]*(1 << 16)
    for i in range(len(x)):
        if bitset[x[i]]:
            bitset[x[i]].append(i)
        else:
            bitset[x[i]] = [i]
    allset = (1 << 16) - 1
    for q in queries:
        ideal = q[0]^allset
        for i in range(1 << 16):
            if inrange(bitset[i^ideal],q):
                ans.append(allset^i)
                break
    return ans


def inrange(a,q):
    if a:
        p = b_search(a,q[1]-1)
        if p < len(a) and a[p] < q[2]:
            return True
        return False
    return False


def b_search(a,x):
    l = 0
    r = len(a)
    while l != r:
        m = l + (r-l)//2
        if x > a[m]:
            l = m + 1
        else:
            r = m
    return r

if __name__ == '__main__':
    fptr = open(os.environ['OUTPUT_PATH'],'w')

    t = int(input())

    for t_itr in range(t):
        nq = input().split()

        n = int(nq[0])

        q = int(nq[1])

        x = list(map(int,input().rstrip().split()))

        queries = []

        for _ in range(q):
            queries.append(list(map(int,input().rstrip().split())))

        result = xorKey(x,queries)

        fptr.write('\n'.join(map(str,result)))
        fptr.write('\n')

    fptr.close()

它没有通过所有测试用例,因此肯定需要一些优化。任何建议都会被采纳。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)