解决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
相关产品推荐
相关产品推荐

