Given an array nums and a value val, remove all instances of that value in-place and return the new length.
Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.
The order of elements can be changed. It doesn't matter what you leave beyond the new length.
Example 1:
Given nums = [3,2,2,3], val = 3, Your function should return length = 2, with the first two elements of nums being 2. It doesn't matter what you leave beyond the returned length.
Example 2:
Given nums = [0,1,2,2,3,0,4,2], val = 2, Your function should return length =5
, with the first five elements ofnums
containing0
,1
,3
,0
, and 4. Note that the order of those five elements can be arbitrary. It doesn't matter what values are set beyond the returned length.
题目所要求的是要使用inplace方法,也就是只能在原值/原数组上更改,不能再开辟新的地址空间。
用C++很好的是vector是一个动态的,可以直接用erase()函数把没用的删掉就行了,如果用C的话相对就会困难一些了。
class Solution { public: int removeElement(vector<int>& nums, int val) { //使用in place操作是对这个值/数组本身进行操作 //https://blog.csdn.net/u011489043/article/details/70197020 for(int i=0;i<nums.size();i++){ if(nums[i]==val){ nums.erase(nums.begin()+i); i--; } } return nums.size(); } };
注意,如果要删掉那个元素的话,需要把i回退。
vector的内部实现:https://blog.csdn.net/u012658346/article/details/50725933