原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。
var removeElement = function(nums, val) {
let count = nums.length
for(let i = 0;i < count;i++){
if(nums[i] === val){
nums.splice(i,1)
i--
count--
}
}
console.log('nums',nums)
return nums.length
};
总结:没有体现出算法,利用的是数组的 方法,并且 强行让它成功;繁琐,理解成本大
思路:
设置两个指针,一个从数组的头部开始,一个从数组的尾部开始,先判断left指向的元素是否为val,不是则left向前一步,是则将right的值赋值给left,如果让right值向前一步,再来判断赋值后的left值是否为val,这样val就到数组的后面
时间复杂度为O(n)
空间复杂度为O(1)
var removeElement = function(nums, val) {
let l = 0,r = nums.length - 1;
while(l < r){
// 将不是val的值放在左边
if(nums[l] === val){
nums[l] = nums[r]
r--
} else {
l++
}
}
return l + 1
};
var removeElement = function(nums, val) {
let left = 0;
let right = nums.length;
while (left < right) {
if (nums[left] === val) {
nums[left] = nums[right-1];
right--;
} else {
left++;
}
}
return left;
};
var removeElement = function(nums, val) {
let l = 0,r = nums.length - 1;
while(l <= r){
// 将不是val的值放在左边
if(nums[l] === val){
nums[l] = nums[r]
r--
} else {
l++
}
}
return l
};