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

解决LeetCode 2932. Maximum Strong Pair XOR I问题时遭遇IndexError: list index out of range错误的求助

解决LeetCode 2932. Maximum Strong Pair XOR I问题时遭遇IndexError: list index out of range错误的求助

嘿,我来帮你捋捋这个问题哈~ 你遇到的IndexError其实是因为你的pair列表有可能是空的,这时候你去取sorted(pair)[-1][0]自然就会报错,毕竟空列表里压根没有元素可以取嘛!

咱们来分析下什么时候pair会为空:

  • 当输入的nums只有一个元素时,combinations(nums,2)根本生成不了任何配对,pair就会是空的;
  • 当nums里的所有两两组合都不满足abs(a - b) <= min(a,b)这个强对条件时,pair也会是空的。

而且还有个小细节:题目里的强对其实是允许a和b是同一个元素的哦!因为当a=b时,abs(a-b)=0,肯定小于等于min(a,b),这时候异或结果是0,这种情况你的代码完全没覆盖到。

那怎么解决呢?给你两个实用思路:

思路一:用双重循环覆盖所有可能的配对(包括自身配对)

这种方法更直观,也不容易遗漏情况,而且不用操心空列表的问题:

from typing import List

def maximumStrongPairXor(nums: List[int]) -> int:
    max_xor = 0
    # 遍历所有i和j,包括i=j的情况
    for i in range(len(nums)):
        a = nums[i]
        for j in range(i, len(nums)):
            b = nums[j]
            if abs(a - b) <= min(a, b):
                current_xor = a ^ b
                if current_xor > max_xor:
                    max_xor = current_xor
    return max_xor

思路二:修复原代码,处理空列表和自身配对的情况

如果你还是想用combinations的话,可以加上自身配对的情况,或者在返回前判断列表是否为空:

from itertools import combinations
from typing import List

def maximumStrongPairXor(nums: List[int]) -> int:
    pair = []
    # 处理两两不同的元素配对
    for a, b in combinations(nums, 2):
        if abs(a - b) <= min(a, b):
            pair.append(a ^ b)
    # 处理元素和自身的配对(异或结果为0)
    for num in nums:
        pair.append(num ^ num)
    # 直接返回最大值,不用排序再取最后一个,更高效
    return max(pair)

另外提个小优化:用max()函数直接取最大值比先排序再取最后一个元素要高效得多,毕竟排序的时间复杂度是O(n log n),而遍历找最大值只需要O(n)~

备注:内容来源于stack exchange,提问作者jacobcan118

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 07:59:32