Remove Element
LeetCode笔记 阅读(418)
编号 : 27 难度 : <font color="green">Easy</font> # 题目 : >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 of nums containing **0, 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. > >**Clarification**: > >Confused why the returned value is an integer but your answer is an array? > >Note that the input array is passed in by reference, which means modification to the input array will be known to the caller as well. > >Internally you can think of this: >``` >// nums is passed in by reference. (i.e., without making a copy) >int len = removeElement(nums, val); > >// any modification to nums in your function would be known by the caller. >// using the length returned by your function, it prints the first len elements. >for (int i = 0; i < len; i++) { > print(nums[i]); >} >``` > # 解 : ```Cpp class Solution { public: int removeElement(vector<int>& nums, int val) { int index = 0; // 指示要插入的位置 for(int i = 0; i < nums.size(); i++) { if(nums[i] != val) // 把不等于val的数据插进去 { nums[index] = nums[i]; index += 1; } } return index; } }; ``` # 分析 : 这道题要求把数组中指定的值删除,只要将保留的值放在数组开头并返回正确的长度即可,尾部多余的部分可以不用处理。 上述解法从头开始扫描数组,将不等于`val`的值依次插到开头,最后返回保留元素的长度。