Python LeetCode练习removeElement返回integer[]类型报错如何解决
问题根源
- 首先检查代码缩进:Python语法要求类的方法定义必须缩进4个空格,你贴出的两段代码中
def removeElement行都没有对应缩进,若实际代码也是如此需要先修正缩进问题。 - 核心错误是返回值类型不匹配:你代码注释中标注的
:rtype: int已经明确了返回值类型为整数,LeetCode第27题「移除元素」要求你原地修改输入数组nums后,返回删除元素后的新数组长度(整数),而非直接返回修改后的nums列表。你两次提交都返回了列表对象,和要求的返回类型不符,因此触发类型错误。
修复方案
方案1:基于现有逻辑修改
你原本修改数组的逻辑是可行的,仅需调整返回值为数组长度即可:
class Solution(object): def removeElement(self, nums, val): """ :type nums: List[int] :type val: int :rtype: int """ while nums.count(val) != 0: nums.remove(val) # 返回新数组长度,而非数组本身 return len(nums)
方案2:双指针优化写法
反复调用count和remove方法会产生多次遍历开销,双指针法可将时间复杂度降至O(n),更推荐使用:
class Solution(object): def removeElement(self, nums, val): """ :type nums: List[int] :type val: int :rtype: int """ slow = 0 for fast in range(len(nums)): if nums[fast] != val: nums[slow] = nums[fast] slow += 1 return slow
补充说明
LeetCode原地修改类的数组题目,后台评判逻辑会根据你返回的长度k,校验nums数组前k位的元素是否符合要求,不需要你返回整个数组,严格按照题目给出的返回类型要求返回对应值即可。
内容的提问来源于stack exchange,提问作者Justin
相关产品推荐
相关产品推荐

