双指针
删除 v a l val val 等价于将不等于 v a l val val 的数按原来的顺序插入数组。
判断当前数和
v
a
l
val
val 是否相等 。相等则跳过,向右遍历。不相等,则遇到非
v
a
l
val
val 的数,插入待插入位置,待插入位置向右一位。
j
j
j 指向待插入位置,
i
i
i 指向遍历的位置。
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int j = 0;
for(int i=0;i<nums.size();i++)
if(nums[i]!=val)
nums[j++] = nums[i];
return j;
}
};
- 时间复杂度 : O ( n ) O(n) O(n) , n n n 是数组 n u m s nums nums 的长度 , 一次遍历的时间复杂度 O ( n ) O(n) O(n) 。
- 空间复杂度 : O ( 1 ) O(1) O(1) , 原地修改,没有用到额外的线性空间 。
博主致语
理解思路很重要!
欢迎读者在评论区留言,作为日更博主,看到就会回复的。