LeetCode-27. Remove Element

一、问题描述

  给定一个数组v和一个数n,要求删除数组中所有和n向等的数,并且将不为n的数放入数组前面,返回数组长度。

  例子:v={3,2,2,3},n=3,返回2,且v的前两项必须为两个2

二、问题解决

  这个题目和26题其实是一模一样的,看看26题吧。

int removeElement(vector<int>& nums, int val) {
    if (nums.size() == 0) return 0;
    int pos = 0; 
   //先找到第一个为val的地方,如果前面都不为val,则可以避免写操作。
while (pos<nums.size() && nums.at(pos) != val) { pos++; } int pos2 = pos; while (pos2 < nums.size()) { if (nums.at(pos2) == val) { pos2++; continue; } if (pos2 != pos) nums.at(pos) = nums.at(pos2); pos++; pos2++; } return pos; } int main() { vector<int> v = {1}; cout << removeElement(v,1) << endl; system("pause"); return 0; }

 三、问题反思

这个题明明和26题一样,写的时候还是写了很久。而且写了一个很复杂的版本,逻辑不清楚,看下面

int removeElement(vector<int>& nums, int val) {
    int i = 0;
    for (int j = 0; j < nums.size(); j++) {
        if (nums[j] != val) {
            nums[i] = nums[j];
            i++;
        }
    }
    return i;
}
原文地址:https://www.cnblogs.com/likaiming/p/8311205.html