前言
从今天来解算法题,从逻辑上突破一下。
先从简单开始,立志刷完一千道,欢迎大家关注我的《刷题专栏》,一起来刷题。
算法题:移除元素
《移除元素》这道题,本身从题目上来看,并不难。
题意:
从一个整数数组中,将元素等于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; }
这是我的执行结果,顺利做完题挺好。
总结
总结一下,这道题的主要考点在于其对引用数据类型的了解,和对空间复杂度的了解。
只要搞清数组的元素替换就可以了。