空间复杂度O(1)
题目中不需要保持数组按照原来的顺序。
返回值是删除完key的剩余元素个数。所以我们使用前后指针,f指针指到key的位置,l指最后非key的位置。交换元素。
func removeElement(nums []int, val int) int {
i, j := 0, len(nums) - 1
for {
for i < len(nums) && nums[i] != val {
i++
}
for j >= 0 && nums[j] == val {
j--
}
if i >= j {
break
}
nums[i], nums[j] = nums[j], nums[i]
}
return i
}