LeetCode有效山脉数组(Valid Mountain Array)Python代码报错排查求助
Valid Mountain Array代码问题分析与修正
问题点拆解
变量名不当:你用
list作为自定义变量名,这是Python内置的类型名称,虽然不会直接报错,但可能引发潜在的逻辑混淆,建议替换为unique_arr这类专属名称。sort()方法的致命误区:这是导致测试用例
[0,3,2,1]返回False的核心原因。arr[:index].sort()是原地排序操作,它会直接修改原切片列表,且返回值为None。你写的arr[:index]==arr[:index].sort()本质是在比较原切片和None,结果必然是False。正确的做法是使用sorted()函数,它会生成一个新的排序后的列表,不会修改原数据,比如sorted(arr[:index])。未处理峰值边界:山脉数组要求峰值既不能在第一个位置(比如
[3,2,1]只有递减段),也不能在最后一个位置(比如[1,2,3]只有递增段),你的代码没有做这个判断,会导致这类无效数组被误判为合法。缺少默认返回值:当所有条件都不满足时,你的函数没有明确返回
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
相关产品推荐
相关产品推荐

