Java中数组元素的删除
这是一个LeetCode的简单题,在二刷做过的题时突然感觉这个题真的是非常的不错,虽然是个简单题,没有什么技巧,但是写代码的过程中有很多要注意的点,感觉还是很考验基本功,而且还加深了对数组的理解。
Java中的数组是存放一系列相同元素的集合,对应着堆空间中的连续的存储空间,所以在删除数组中某个元素的时候为保证数组的连续性,需要将后面的元素逐一向前覆盖,这就是这个题的解题思路。代码如下:
public static void main(String[] args) {int[] nums = {2, 3, 3, 2};int target = 3;//首先遍历数组找targetint len = nums.length;int i = 0;while (i < len) {if (nums[i] == target) {//这时就需要删除该元素了,需要将后面的元素逐步向前覆盖for (int j = i; j < len - 1; j++) {nums[j] = nums[j + 1];}i--;//需要将指针后移一位,因为此时i的位置上是原来i+1处的元 //素,不后移会跳过该元素的处理len--;//因为删除了一个元素所以需要len--}i++;}System.out.println(Arrays.toString(nums));//输出{2, 2, 2, 2}}
代码中两个for循环其实还可以用双指针来代替,这样时间复杂度更低,代码如下,思想比较简单,其实就是对数组进行重排,然后移除掉我们要删除的,把留下来的元素从数组头开始放,所以用一个i指针来记录了我们下一个要放的元素的位置,这种思想在很多地方都有应用,比如排序算法。
public int removeElement(int[] nums, int val) {int len = nums.length;int i = 0;int j = 0;while (i < len && j < len) {if (nums[j] != val) {nums[i] = nums[j];i++;}j++;}return i;}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
