LeetCode 27:移除元素
今日更新,刷题打卡第二题,是《LeetCode 27:移除元素》,自我感觉这道题比上一篇二分查找更简单一点
一、题目
题目未截全,如有需要,详见 https://leetcode-cn.com/problems/remove-element/
二、解析
题目要求原地移除所有 val 的值,并返回新数组的长度;并且要求空间复杂度是 O(1)。
1.确定空间开销:既然题目是 O(1) 的复杂度,那么就别想新增数组单独存放非val值的方法了,所以还得是在原数组上做动作。
2.使用两个index:使用nums[i] 和 nums[j] 来区分原始数组和修改后的数组
i:用来遍历所有的值,判断 nums[i] 和 val 是否相等
j:用来存放修改后的值,只有和 val 不相等的才往 nums[j] 里放
3.数组的新长度:在循环中,最后一个 nums[j] = nums[i] 存放完成之后,又做了 j += 1 的动作,所以此时的 j 比下标多 1,刚好等于数组的长度,返回 j 即所求。
三、编码
class Solution:
def removeElement(self, nums: list[int], val: int) -> int:
i,j = 0,0
while i < len(nums):
if nums[i] != val:
nums[j] = nums[i]
i += 1
j += 1
else:
i +=1
return j