题目
给定一个数组和一个值,原地(in place)删除该值在数组中的所有实例,并返回新的长度。
不要分配额外的内存空间给其它数组,必须使用常数内存进行原地操作。
元素的顺序可以改变,只要返回的新长度正确即可。
示例:
给定输入数组 nums = [3, 2, 2, 3],val = 3,你的函数应该返回 length = 2,nums 的前两个元素为 2。
难度:容易
编程语言:C++
分析
这道题目很简单,直接调用 vector.erase 即可,vector.erase 返回被删除元素的下一个元素的迭代器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #include <iostream> #include <vector> using namespace std; class Solution { public: int removeElement(vector<int>& nums, int val) { for (vector<int>::iterator iter = nums.begin(); iter != nums.end(); ) { if (*iter == val) { iter = nums.erase(iter); } else { iter++; } } return nums.size(); } }; int main() { vector<int> nums = { 3, 2, 2, 3 }; int val = 3; Solution sol; cout << sol.removeElement(nums, val) << endl; }
|
提交到 Leetcode,Accepted! :) 运行时间为 3ms。