27. 移除元素

图片说明

class Solution {
    public int removeElement(int[] nums, int val) {
        int len = nums.length;
        if (len == 0) return 0;
        int i = 0;
        int res = 0;
//跟26题一样 差不多的思路 也就是想想怎么移动双指针的位置 一共有三种移动方式 
        while (i < len) {
//第一种移动方式 就是需要移除 所以我们需要定位到不需要移除的位置 然后赋值
            if (nums[i] == val) {
                while(i<len && nums[i]==val){
                    i++;
                }
                if(i<len){
                    nums[res] = nums[i];
                    res++;
                }
            }
//第二种定位方式是不同步问题 也就是两个指针一前一后 说明两个指针之间存在空位 
           else if (nums[i] != val&&i!=res){
                nums[res] = nums[i];
                res++;
            }
//第三种定位是 指针同步 所以一起前进
            else if (nums[i] != val&&i==res){
                res++;
            }
            i++;
        }
        return res;
    }
}

第二种解法 也是上面方式的代码优化

class Solution {
    public int removeElement(int[] nums, int val) {
        int i = 0;
        for (int j = 0; j < nums.length; j++) {
            if (nums[j] != val) {
                nums[i] = nums[j];
                i++;
            }
        }
        return i;
    }
}

官方的解法也很微妙

class Solution {
    public int removeElement(int[] nums, int val) {
        int i = 0;
        int n = nums.length;
        while (i < n) {
            if (nums[i] == val) {
                nums[i] = nums[n - 1];
                n--;
            } else {
                i++;
            }
        }
        return n;
    }
}
全部评论

相关推荐

头像
02-26 13:58
门头沟学院 Java
北城_阿亮:把八股背一背,包装一下实习经历项目经历,要是有心思考证就考一考,然后把别人的项目爬到自己github上,包装到简历里,什么三个月?一个月!
点赞 评论 收藏
分享
Beeee0927:正确的建议
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务