刷题专栏(一):移除元素

142 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情

前言

从今天来解算法题,从逻辑上突破一下。

先从简单开始,立志刷完一千道,欢迎大家关注我的《刷题专栏》,一起来刷题。

image.png

算法题:移除元素

《移除元素》这道题,本身从题目上来看,并不难。

题意:

从一个整数数组中,将元素等于val的元素移除。

这里其实也不是真正的删除掉,最后的结果是要将整数数组减去val元素存在总数后的前N位。

比如一个数组 [3,2,2,3],val提供的值是3。

然后我们应该返回整数2(因为数组中存在着两个3),整数数组最后应该是[2,2,n,n](这里的n可以是任何数字,因为最后验证时只会获取前2位数组元素,此时保证其中不包含val值3即可)。

思路:

主要是有一个空间复杂度必须满足O(1),这就说明了不能再暴力无脑循环了。

这道题最后要得到一个int整数值,还有数组中的元素变动。

一开始想到可能需要排序之类的算法,后来发现想多了。

只需要将所有的不符合val值的元素往前提即可,其中可以通过总数来作下标。

代码展示

我们来看一下具体代码:

public static void main(String[] args) {
    Solution solution = new Solution();
    System.out.println(solution.removeElement(new int[]{3,2,2,3}, 3));
}

public int removeElement(int[] nums, int val) {
    int count = 0;
    for (int i = 0; i < nums.length; i++) {
        if (nums[i] != val) {
            nums[count] = nums[i];
            count++;
        }
    }
    System.out.println(Arrays.toString(nums));
    return count;
}

这是我的执行结果,顺利做完题挺好。

image.png

总结

总结一下,这道题的主要考点在于其对引用数据类型的了解,和对空间复杂度的了解。

只要搞清数组的元素替换就可以了。