前一阵去西藏玩了,停更了几天,现在接着续更。
照例先上题目
题目要求原地修改数组,采用快慢指针法,快指针用于遍历数组,慢指针用于记录有效元素后一位。满指针和快指针之间的元素为有效元素。
起始时,快指针和慢指针都指向第一个元素。在遍历时每当快指针所指元素为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;}
};
希望自己的代码风格能越来越精简规范。
更多推荐
移除,元素,力扣
发布评论