力扣算法小计(一):27. 移除元素
2023-04-09 本文已影响0人
南风知我咦
题目
思路
- 一开始想着怎么删除元素哈,想了很久,然后发现了一句话:
函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素
- 你不需要考虑数组中超出新长度后面的元素这句话关键啊,所以只需要把符合的元素移到队尾就OK了。
- 所以整体思路就是双指针,前面的判断是否需要剔除的元素,后面的指针指向需要交换的元素
- 每次找到需要剔除的元素,right指针的元素赋值给left。然后right--。(因为交换后right就是剔除的无效元素了,所以需要指向前一个有用的元素)。
- 不断循环知道left>right
- 返回left就是剩余的有效的元素个数。
代码
/**
* 双指针
* @return
*/
public static int stupidFun(int[] nums, int val) {
int left = 0;
int right = nums.length - 1;
while (left < right) {
if (nums[left] == val) {
nums[left] = nums[right];
right--;
}else
left++;
}
return left;
}