27.移除元素

题目是这样的
这是示例
1. 暴力解决
这道题目直接可以暴力解,用二重循环,第一重遍历寻找数组中等于val的值,第二重将数组中val后面的值全部往前一位,代码如下
1 | int removeElement(int *nums,int numsSize,int val) |
2. 小技巧
因为题目有说明只要让nums的前k个元素包含不等于val,那么我们只要遍历整个数组,然后将!=val的值
提前排序即可,代码如下
1 | int removeElement(int *nums, int numsSize, int val) { |
说实话这个应该是最快的,而且思路好像跟下面的快慢指针一样?
JAVA代码如下:
1 | class Solution { |
3. 快慢指针
看的别人的wp,了解一下快慢指针
1 | 快慢指针 就是用速度不同的指针(用在链表,数组,序列等上面),来解决一些问题 |
以本题为例,快慢指针用fast和slow两个指针控制,快指针指向当前要和val对比的元素,慢指针指向将被赋值的位置,说实话和上面的小技巧一样的,
思路:
1
2
3
4遍历数组
如果fast指向的元素 nums[fast]!=val,那么nums[fast]就要输出,把它放到nums[slow]的位置,slow 和 fast 同时向后移动一位。
如果 nums[fast] == val,证明当前 nums[fast] 是要删除的元素,fast 向后移动一位。
fast 遍历完整个数组,结束,slow 的值就是剩余数组的长度。代码:
1
2
3
4
5
6
7
8
9
10
11int removeElement(int *nums, int numsSize, int val) {
int fast=0;
int slow=0
for (; fast < numsSize; fast++) {
if (nums[fast] != val) {
nums[slow] = nums[fast];
slow++;
}
}
return slow;
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 ᕙ(• ॒ ູ•)ᕘ欢迎光临ᕙ(`▿´)ᕗ!




