27. 移除元素
题目描述
双指针
分析:
- 设置两个指针,
i=0
是慢指针,j=0
是快指针,当nums[j]!=val
时,将nums[j]
赋值给nums[i]
,i
和j
再同时加1
;否则j
加1
。
官方解↓
/**
* @param {number[]} nums
* @param {number} val
* @return {number}
*/
var removeElement = function(nums, val) {
var i=0,j;
for(j=0;j<nums.length;j++){
if(nums[j]!=val){
nums[i]=nums[j];
i++;
}
}
return i;
};
- 我写的LaJi↓,脑子没转过来
/**
* @param {number[]} nums
* @param {number} val
* @return {number}
*/
var removeElement = function(nums, val) {
var flag=-1,i,j;
for(i=0;i<nums.length;i++){
if(nums[i]==val){
flag=i;
break;
}
}
if(flag==-1)
return nums.length;
for(j=flag+1;j<nums.length;j++){
if(nums[j]!=val){
nums[flag]=nums[j];
flag++;
}
}
var count=flag;
return count;
};
复杂度分析:
- 时间复杂度: O ( n ) O(n) O(n) 。
- 空间复杂度: O ( 1 ) O(1) O(1)。