Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
leetcode刷题27移除元素
前文
本文为leetcode数组相关类型题目,题目序号为27,主要考察对于数组中元素移除时的效率问题。
题目信息
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
解题思路
首先进行题目阅读,我们现在有一个数组,同时有一个目标变量。我们要做的是查找数组中等于该变量的所有元素,并将其移除,也就是移动到数组目标位置之外。由于有空间要求,因此此处采用指针进行处理。通过两个快慢指针,在数组中遍历。当快指针遇到与目标数据不一致的元素时,则替换慢指针的对应位置的元素。当遇到相同元素时,快指针向前移动,慢指针保持位置不变。这样当整个数组遍历结束,快指针到达数组末位时,慢指针的位置之前即位所有不一致的元素,也就得到了目标结果。该题目的核心是转变思想,我们不需要对元素进行实际的移动,只需要将需要的元素放在需要的位置即可。
解题代码
public int removeElement(int[] nums, int val) {
if(nums.length == 0){
return 0;
}
nums = Arrays.stream(nums).sorted().toArray();
int p = 0;
int q = 0;
while (p < nums.length) {
if(nums[p] != val){
nums[q] = nums[p];
q++;
}
p++;
}
return q + 1;
}
后记
- 千古兴亡多少事?悠悠。不尽长江滚滚流。