LeetCode 027 Remove Element

来源:互联网 发布:在淘宝代运营公司工作 编辑:程序博客网 时间:2024/06/08 06:23

题目要求把数组里等于某数的项都删掉。注意题目里说数组里的数字顺序可以变化。

当要删掉的数字在原数组里很少的时候,如何保证写入次数最少?我们保留两个指针(或iterator)i和j,i指向当前可以覆盖的位置,即要删掉的数所在位置;j指向当前从末尾开始第一个非需要删掉的数字的位置,每次交换i和j的内容即可。

int removeElement(vector<int>& nums, int val) {        if(nums.size() == 0)            return 0;        auto i = nums.begin();        auto j = nums.end() - 1;        while(j != i && *j == val) j--;        if(*j == val) return 0;        else if(i == j) return 1;        while(i < j) {            while(i < j && *i != val) i++;            swap(*i, *j);            i++;            while(i < j && *j == val) j--;        }        while(i != nums.end() && *i != val) i++;        return i - nums.begin();    }
0 0