本文所写的两篇文章均参考官方的java解法,官方没有python的答案。
优化的地方是第一个if语句。
解法一:
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
#首先看到val的范围比nums[i]大了一倍,先缩小范围,这一步非常关键。
#如果没有这一步,一旦出现一个数字大于50,仍然会从头到尾比较
if val >50 :
#这里注意返回的是一个数,不是数组本身(会报错)
return len(nums)
#双指针法
n = len(nums)
left = 0
right = 0
while right < n:
if nums[right] != val:
nums[left] = nums[right]
left += 1
right += 1
return left
解法二
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
#首先看到val的范围比nums[i]大了一倍,先缩小范围
if val >50 :
#这里注意返回的是一个数,不是数组本身(会报错)
return len(nums)
#双指针法
n = len(nums)
left = 0
right = n
while left < right:
if nums[left] == val:
nums[left] = nums[right-1]
right -= 1
else:
left += 1
return left