26、80 删除数组中的重复项

例题. 26 删除数组中的重复项 Easy
练习1. 80 删除数组中的重复项,使得每个元素最多出现两次 Medium
练习2. 27 删除等于val的元素 Easy
练习3. 283 把数组中所有的0元素移动到数组末尾 Easy

一、26 删除排序数组中的重复项

【题目】

【代码】

class Solution {
    public int removeDuplicates(int[] nums) {
        int len = nums.length;
        if(len == 0) return 0;

        int i = 0;
        for(int j=1; j<len;){
            if(nums[j] ==nums[i]){  //相等则看下一个
                j++;
            }else{                  //不相等,则把a[j]放到i的下一个位置
                i++;
                nums[i] = nums[j];
                j++;
            }
        }
        return i+1;
    }
}

二、80 删除排序数组中的重复项,使得每个元素最多出现两次

【题目】

【分析】

【代码】

class Solution {
    public int removeDuplicates(int[] nums) {
        int len = nums.length;
        if(len <= 2) return len;

        int i=2;    //i位置用来保存元素
        for(int j=2; j<len; j++){
             if(nums[j] != nums[i-2]){
                 nums[i++] = nums[j];
             }
        }

        return i;
    }
}

练习2. 27 删除等于val的元素

【题目】

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

【分析:思路一】

在这里插入图片描述
核心思想为:
if(a[j]==val){
j++; //看下一个元素
}else{
a[i]=a[j]; //放到i的位置
i++; //用于存放下个不为val的元素
j++; //看下一个元素
}

代码:

class Solution {
    public int removeElement(int[] nums, int val) {
        int len = nums.length;
        if(len == 0) return 0;

        int i=0;
        for(int j=0;j<len;){
            if(nums[j] == val){
                j++;
            }else{
                nums[i] = nums[j];
                i++;
                j++;
            }
        }

        return i;
    }
}

结果:
在这里插入图片描述

【分析:思路二】

核心思想:找到不为val的元素,拿到前面。

在这里插入图片描述

代码:

class Solution {
    public int removeElement(int[] nums, int val) {
        int len = nums.length;
        if(len == 0) return 0;

        int i=0;
        for(int j=0;j<len;j++){
            if(nums[j] != val){
                nums[i++] = nums[j];
            }
        }

        return i;
    }
}

结果:
在这里插入图片描述

练习3. 283 把数组中所有的0元素移动到数组末尾

【题目】

在这里插入图片描述
在这里插入图片描述

【分析】

27题目是删除所有值等于val的元素。也就是使所有非val的元素都在前面。
而这个题是把所有非0元素放到前面,无非就是令27的val等于0。

【代码】

class Solution {
    public void moveZeroes(int[] nums) {
        int len = nums.length;
        if(len <= 1) return;

        int i=0;    //i存放元素
        for(int j=0; j<len; j++){   //首先把非0元素移动到前面
            if(nums[j] !=0){
                nums[i++] = nums[j];
            }
        }

        for(;i<len;i++){            //然后把最后的元素置零
            nums[i]=0;
        }

    }
}

结果:
在这里插入图片描述

发布了6 篇原创文章 · 获赞 0 · 访问量 183

猜你喜欢

转载自blog.csdn.net/siyuchuanmei2020/article/details/104127881