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

LeetCode有效山脉数组(Valid Mountain Array)Python代码报错排查求助

Valid Mountain Array代码问题分析与修正

问题点拆解

  1. 变量名不当:你用list作为自定义变量名,这是Python内置的类型名称,虽然不会直接报错,但可能引发潜在的逻辑混淆,建议替换为unique_arr这类专属名称。

  2. sort()方法的致命误区:这是导致测试用例[0,3,2,1]返回False的核心原因。arr[:index].sort()是原地排序操作,它会直接修改原切片列表,且返回值为None。你写的arr[:index]==arr[:index].sort()本质是在比较原切片和None,结果必然是False。正确的做法是使用sorted()函数,它会生成一个新的排序后的列表,不会修改原数据,比如sorted(arr[:index])。

  3. 未处理峰值边界:山脉数组要求峰值既不能在第一个位置(比如[3,2,1]只有递减段),也不能在最后一个位置(比如[1,2,3]只有递增段),你的代码没有做这个判断,会导致这类无效数组被误判为合法。

  4. 缺少默认返回值:当所有条件都不满足时,你的函数没有明确返回False,Python会默认返回None,不符合题目要求的布尔值输出。

修正后的代码

class Solution(object):
    def validMountainArray(self, arr):
        """
        :type arr: List[int]
        :rtype: bool
        """
        # 数组长度至少为3才符合山脉数组的基本要求
        if len(arr) < 3:
            return False
        
        peak_index = arr.index(max(arr))
        # 峰值不能在数组首尾
        if peak_index == 0 or peak_index == len(arr) - 1:
            return False
        
        # 验证从起点到峰值是否严格递增
        for i in range(peak_index):
            if arr[i] >= arr[i+1]:
                return False
        
        # 验证从峰值到终点是否严格递减
        for i in range(peak_index, len(arr)-1):
            if arr[i] <= arr[i+1]:
                return False
        
        return True

额外说明

原代码里的去重判断是多余的,因为严格递增和严格递减的逻辑已经保证了数组中不会有重复元素,所以可以直接删除这部分代码,既简化逻辑又提升效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 07:22:25