leetcode27_删除元素

题目链接:https://leetcode-cn.com/problems/remove-element/

方法1——首位指针

首指针在头,尾指针在末尾,如果首指针指的是val,则交换。

public int removeElement(int[] nums, int val) {
    int l = 0, r = nums.length;
    while (l < r) {
        if(nums[l] == val) {
            nums[l] = nums[r-1];
            r--;
        }
        else {
            l++;
        }
    }
    return l;
}

方法2——快慢指针

删除元素之后得到是一个新数组,称之为输出数组,原数组称之为输入数组。为了省空间,可以直接把输出数组写在输入数组的空间上。
为了遍历输入和输出数组,声明两个指针分别指向这两个数组。
当输入变量等于val时,没有资格输出到输出数组;当输入变量不等于val时,则直接输出到输出数组。
这里最重要的一个转化就是把删除直接变成了输出数组。

public int removeElement(int[] nums, int val) {
    int len = nums.length;
    int input = 0, output = 0;
    for(;output< len; output++) {
        if(nums[output] != val) {
            nums[input] = nums[output];
            input++;
        }
    }
    return input;
}
posted @ 2022-02-13 15:07  明卿册  阅读(19)  评论(0编辑  收藏  举报