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;

}

你可能感兴趣的:(27. 移除元素)