题目描述
Given an array nums and a value val, remove all instances of that value in-place and return the new length.
Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.
The order of elements can be changed. It doesn't matter what you leave beyond the new length.
Example 1:
Given nums = [3,2,2,3], val = 3,
Your function should return length = 2, with the first two elements of nums being 2.
It doesn't matter what you leave beyond the returned length.
Example 2:
Given nums = [0,1,2,2,3,0,4,2], val = 2,
Your function should return length = 5, with the first five elements of nums containing 0, 1, 3, 0, and 4.
Note that the order of those five elements can be arbitrary.
解题思路
这道题与 26 题一样, 需要我们用 O(1)的空间复杂度来实现. 所以我们借用 26 题的思路,在遍历的时候, 将不等于 val 的值与 val 值交换位置,这样数组前边的就全部为不等于 val 的数字了
时间复杂度: O(n)
示例代码
func removeElement(_ nums: inout [Int], _ val: Int) -> Int {
var vernier1 = 0
var vernier2 = 0
while vernier1 < nums.count {
if nums[vernier1] == val {
vernier1 += 1
}else {
nums[vernier2] = nums[vernier1]
vernier1 += 1
vernier2 += 1
}
}
return vernier2
}