【leetcode 28】27.移除元素==双指针==
题链
1.双层for循环
i–; // 因为下标i以后的数值都向前移动了一位,所以i也向前移动一位
len–; // 此时数组的大小-1
class Solution {
public int removeElement(int[] nums, int val) {
//1.两层循环
int len=nums.length;
for(int i=0;i<len;i++){
if(nums[i]==val){
for(int j=i+1;j<len;j++){
nums[j-1]=nums[j];
}
i--; // 因为下标i以后的数值都向前移动了一位,所以i也向前移动一位
len--; // 此时数组的大小-1
}
}
return len;
}
}
2.双指针法
双指针法(快慢指针法): 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。
定义快慢指针
快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
慢指针:指向更新 新数组下标的位置
class Solution {
public int removeElement(int[] nums, int val) {
//2.双指针法
int slowIndex=0;
for(int fastIndex=0;fastIndex<nums.length;fastIndex++){
if(nums[fastIndex]!=val){
nums[slowIndex]=nums[fastIndex];
slowIndex++;
}
}
return slowIndex;
}
}