【leetcode 28】27.移除元素==双指针==

题链
【leetcode 28】27.移除元素==双指针==_第1张图片

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;
    }
}

你可能感兴趣的:(刷题,leetcode,算法,职场和发展,java)