27. 移除元素

自己解法

这题和删除排序数组中重复的元素类似,都是将后面的元素往前移,所以只要维护好有效数组的下标就好了。

class Solution {

    public int removeElement(int[] nums, int val) {

        int j = 0;

        for (int i = 0; i < nums.length; i++) {

            if (nums[i] != val) {

                nums[j] = nums[i];

                j++;

            }

        }

        return j;

    }

}

官方解法

双指针解法,一个指针前遍历,一个指针从后遍历,前面指针等于val时,用后面指针内容覆盖前面指针内容,后面指针减一,重新进行判断,直到两者相遇。

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

            // reduce array size by one

            n--;

        } else {

            i++;

        }

    }

    return n;

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。