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

如何优化出现超时、运行时错误的Humpy跳跃最大异或值计算Python代码

原代码问题分析
  • 逻辑完全错误:未正确理解题意。题目要求的是跳跃路径上所有停留建筑高度的异或值,而非两个高度的异或值,原代码完全没有计算多步跳跃的异或结果,无法得到正确答案。
  • 运行时错误:当去重后的高度列表长度小于2时,双重循环不会给Max列表添加任何元素,执行max(Max)时会触发空序列取最大值的报错。
  • 时间复杂度过高:双重循环的时间复杂度为O(m²)(m为去重后高度数量),当数据规模较大时必然触发超时。
正确解法思路
  1. 预处理每个位置的下一个更大元素下标:使用单调栈可以在O(n)时间复杂度内得到每个位置往后第一个比当前元素大的位置,这是Humpy跳跃的下一个落点。
  2. 动态规划计算每个起点的异或值:从后往前遍历数组,dp[i]代表从第i个建筑出发的总消耗。如果i没有下一个更大元素,dp[i] = arr[i];否则dp[i] = arr[i] ^ dp[next_greater[i]],遍历过程中记录最大值即可。
优化后代码
def get_next_greater(arr):
    n = len(arr)
    res = [-1] * n
    stack = []
    for i in range(n-1, -1, -1):
        while stack and arr[stack[-1]] <= arr[i]:
            stack.pop()
        if stack:
            res[i] = stack[-1]
        stack.append(i)
    return res

n = int(input())
arr = list(map(int, input().split()))
next_greater = get_next_greater(arr)
dp = [0] * n
max_consumption = 0
for i in range(n-1, -1, -1):
    if next_greater[i] == -1:
        dp[i] = arr[i]
    else:
        dp[i] = arr[i] ^ dp[next_greater[i]]
    if dp[i] > max_consumption:
        max_consumption = dp[i]
print(max_consumption)

该解法时间复杂度为O(n),空间复杂度为O(n),可以覆盖所有边界情况,不会出现超时和运行时错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 03:54:03