#每日一题 力扣27题 移除元素

前一阵去西藏玩了,停更了几天,现在接着续更。
照例先上题目
在这里插入图片描述
题目要求原地修改数组,采用快慢指针法,快指针用于遍历数组,慢指针用于记录有效元素后一位。满指针和快指针之间的元素为有效元素。
起始时,快指针和慢指针都指向第一个元素。在遍历时每当快指针所指元素为val时,说明该元素要被移除,所以快指针向后移,将该元素置于快指针和慢指针之间。当快指针所指元素不为val时,要将该元素置于慢指针之前,所以将快指针的元素放置在慢指针处,慢指针和快指针均向后移。
附上代码:

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int p = 0, q = 0;
        int n = nums.size();
        for (; p < nums.size(); p++) {
            if (nums[p] != val) {
                if (p != q){
                    int temp = nums[q];
                    nums[q++] = nums[p];
                    nums[p] = temp;
                }else 
                    ++q;
            }else 
                --n;
        }
        return n;
    }
};

代码可以精简一下:

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int p = 0, q = 0;
        for (; p < nums.size(); p++) {
            if (nums[p] != val) {
                if (p != q)
                    nums[q] = nums[p];
                ++q;
            }
        }
        return q;
    }
};

还可以再精简一下!!

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int p = 0, q = 0;
        for (; p < nums.size(); p++) {
            if (nums[p] != val) {   
                nums[q++] = nums[p];
            }
        }
        return q;
    }
};

希望自己的代码风格能越来越精简规范。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值