You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

有序正整数序列中满足X XNOR Y = -1的数对高效查找算法优化咨询

高效解决升序序列中X XNOR Y = -1的配对问题

嘿,这个问题其实可以通过拆解位运算的本质来大幅优化,根本不用暴力的双重循环!先帮你理清楚核心逻辑:

关键转化:从位运算到重复元素统计

首先要搞明白X XNOR Y = -1到底意味着什么。在Python中,整数是以补码形式存储的,-1的二进制表示是无限个连续的1(因为Python支持任意精度的大整数)。

而同或(XNOR)运算的规则是:两个二进制位相同则结果为1,不同则为0。要让整个运算结果为-1(全1),就要求X和Y的每一位二进制位都完全相同——换句话说,X必须等于Y!

这一下就把问题从复杂的位运算判断,转化成了统计升序序列中重复元素的配对数量,以及输出所有相同元素的配对。

高效实现思路(O(n)时间复杂度)

因为序列是升序排列的,相同元素必然是连续出现的。我们可以通过一次遍历序列,统计每个连续相同元素的出现次数,然后计算该元素的配对数(从k个元素中选2个的组合数:k*(k-1)//2),同时输出所有配对。

完整实现代码(输出所有配对+统计总数)

def find_xnor_pairs(seq):
    if not seq:
        print("匹配总数为0")
        return 0
    
    total_pairs = 0
    current_num = seq[0]
    count = 1
    
    # 遍历序列从第二个元素开始
    for num in seq[1:]:
        if num == current_num:
            count += 1
        else:
            # 计算当前连续元素的配对数并输出
            pairs = count * (count - 1) // 2
            total_pairs += pairs
            for _ in range(pairs):
                print(f"X={current_num}, Y={current_num}")
            # 更新当前元素和计数
            current_num = num
            count = 1
    
    # 处理最后一组连续元素
    pairs = count * (count - 1) // 2
    total_pairs += pairs
    for _ in range(pairs):
        print(f"X={current_num}, Y={current_num}")
    
    print(f"匹配总数为{total_pairs}")
    return total_pairs

# 测试示例输入
test_seq = [1, 2, 3, 3, 4, 4, 4, 10, 10, 10]
find_xnor_pairs(test_seq)

运行这段代码会得到和示例完全一致的输出,而且时间复杂度是O(n),比双重循环的O(n²)高效得多,尤其是当序列长度很大时,优势会非常明显。

简化版本(仅统计配对总数)

如果不需要输出具体的配对,只需要统计总数,我们可以用collections.Counter来快速统计元素出现次数,再计算总和:

from collections import Counter

def count_xnor_pairs(seq):
    num_counter = Counter(seq)
    total = sum(k * (k - 1) // 2 for k in num_counter.values())
    print(f"匹配总数为{total}")
    return total

# 测试
count_xnor_pairs(test_seq)

这个版本的时间复杂度同样是O(n),代码更简洁。

为什么这个方法正确?

再强调一次核心逻辑:

  • 当且仅当X和Y的每一位二进制位都相同时,X XNOR Y的结果才会是全1(也就是-1)
  • 而每一位都相同的两个整数,必然是相等的

所以问题等价于找序列中所有相等元素的配对,这也是我们能把复杂度从O(n²)降到O(n)的关键原因。

内容的提问来源于stack exchange,提问作者aloy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 16:22:36