# 算法养成记：移除元素

LeetCode27

Remove Element

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]); }

// nums 是以“引用”方式传递的。也就是说，不对实参作任何拷贝

int len = removeElement(nums, val);

// 在函数里修改输入数组对于调用者是可见的。

// 根据你的函数返回的长度, 它会打印出数组中 该长度范围内 的所有元素。

for (int i = 0; i < len; i++) {

print(nums[i]);

}

1. 定义一个变量l，赋初值0，用于记录变化后的数组长度，也记录该数组尾部的位置；
2. 从0开始遍历数组，当前数组的值nums[i]不等于需要剔除的值val时，就将nums[i]的值放到nums[l]的位置；如果nums[i]==val，就跳过；这样遍历到数组尾部时，l之前的数组就是剔除了val的新数组，l+1的长度就是新数组的长度；

1. 遍历数组，当前数组的值nums[i]等于需要剔除的值val时,该值是需要被替换掉的，此时我们可以将最后一个元素替换掉nums[i]；
2. 此时又会出现新的情况，最后一个元素可能等于val，可能不等于，所以需要重新判断。所以此时的i需要指回前一个元素，即i--，这样才能在下一次判断时，判定的是先前移动的最后一个元素的值；
3. 由于将最后一个元素覆盖了nums[i]，所以需要一个指针来指数组nums当前的尾部；所以l的初始值等于nums的长度；i<l时跳出循环；

0 条评论

• ### 算法养成记：删除排序数组中的重复项

Given a sorted array nums, remove the duplicates in-place such that each element...

• ### mysql创建索引的原则

b、过多的索引会导致insert、update、delete语句的执行效率降低；

• ### InnoDB 存储引擎之索引和优化

数据库优化可以说是后台开发中永恒的话题，数据库的性能通常是整个服务吞吐量的瓶颈之所在。

• ### 移除元素

给你一个数组 nums 和一个值 val，你需要 原地 移除所有数值等于 val 的元素，并返回移除后数组的新长度。

• ### LeetCode - 移除元素

LeetCode第27题，难度简单。鉴于题目太长了，所以我就只复制了一部分内容，剩下的内容各位可以自己点击下方链接查看原题的示例和说明。

• ### leetcode之移除元素

这里遍历数组，然后维护一个下标，从0开始，每遇到不为val的时候就给赋值给该下标，然后递增下标，最后返回该下标。

• ### LeetCode题目27：移出元素

给你一个数组 nums 和一个值 val，你需要 原地 移除所有数值等于 val 的元素，并返回移除后数组的新长度。

• ### LeetCode 27. 移除元素

给你一个数组 nums 和一个值 val，你需要 原地 移除所有数值等于 val 的元素，并返回移除后数组的新长度。

• ### leetcode之移除元素

这里遍历数组，然后维护一个下标，从0开始，每遇到不为val的时候就给赋值给该下标，然后递增下标，最后返回该下标。

• ### 图解双指针 | LeetCode 27. 移除元素

给定一个数组 nums 和一个值 val，你需要原地移除所有数值等于 val 的元素，返回移除后数组的新长度。