27移除元素

力扣刷题 27.移除元素--day1

解法

一、暴力解法
采用数组移动覆盖的方式来移除元素
时间复杂度为 O(n^2)

//暴力解法
int removeElement(vector<int>& nums, int val) {
    int size = nums.size();
    for(int i = 0; i<size;i++){
        if(nums[i] == val){
            size--;
            for(int j = i; j<size; j++){
                nums[j] = nums[j + 1];
            }
            i--;
        }
    }
    return size;
}

二、双指针法

一个快指针和一个满指针

快指针用于读取元素, 跳过需删除的元素

慢指针稳步前近,存入符合的元素

代码思路:

采用 fast 指针一直往前遍历,

当找到一个不为 val 的元素时,将其存入 slow 指针的位置, fast 和 slow 都进 1

当找到一个为 val 的元素时, slow 不变, fast 进 1

// 双指针法
int removeElement(vector<int>& nums, int val) {
    int slow, fast;
    slow = fast = 0;
    int size = nums.size();
    while(fast < size){
        if(nums[fast] != val){
            nums[slow] = nums[fast];
            slow++;
        }
        fast++;
    }
    return slow;
}
posted @ 2023-04-19 15:33  chuxin_jian  阅读(24)  评论(0)    收藏  举报