1.代码 (python)
class Solution:
# 力扣使用 链接:https://leetcode.cn/problems/remove-element/
def removeElement(self, nums: List[int], val: int) -> int:
# (1)暴力算法,双循环
# size = len(nums)
# count = 0
# while count<size:
# if nums[count] == val:
# id = count
# while id <size-1:
# nums[id]=nums[id+1]
# id+=1
# count -= 1
# size -= 1
# count += 1
# return size
# (2)双指针
size =len(nums)
fast_itr = 0 # 定义快指针
slow_itr = 0 # 定义慢指针
while fast_itr < size :
if nums[fast_itr] == val:
fast_itr += 1
else:
nums[slow_itr] = nums[fast_itr]
fast_itr+=1
slow_itr+=1
return slow_itr
2.数组不能直接删除元素的原因
移除元素不是简单的逻辑层面的删除
要知道数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖
3.双指针法:
双指针法(快慢指针法): 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作
定义快慢指针
·快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
·慢指针:指向更新 新数组下标的位置
- 时间复杂度:O(n)
- 空间复杂度:O(1)