Given an array and a value, 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:
Given nums = [3,2,2,3], val = 3,
Your function should return length = 2, with the first two elements of nums being 2.
Tags: Array, Two Pointers
题意是移除数组中值等于 val
的元素,并返回之后数组的长度,并且题目中指定空间复杂度为 O(1),我的思路是用 tail
标记尾部,遍历该数组时当索引元素不等于 val
时,tail
加一,尾部指向当前元素,最后返回 tail
即可。
class Solution {
public int removeElement(int[] nums, int val) {
int tail = 0;
for (int i = 0, len = nums.length; i < len; ++i) {
if (nums[i] != val) {
nums[tail++] = nums[i];
}
}
return tail;
}
}
kotlin(220ms/92.31%):
class Solution {
fun removeElement(nums: IntArray, `val`: Int): Int {
var count = 0
for (index in nums.indices) {
val t = nums[index]
if (t != `val`) {
nums[count++] = t
}
}
return count
}
}
javascript
var removeElement = function(nums, val) {
var len = nums.length
for(var i = 0; i < len; i++) {
if (nums[i] === val) {
nums.splice(i, 1)
i = i - 1
}
}
return nums.length
};
如果你同我们一样热爱数据结构、算法、LeetCode,可以关注我们 GitHub 上的 LeetCode 题解:LeetCode-Solution