LeetCode_Remove Element

本文介绍了一种简单有效的移除数组中特定值的算法,并提供了详细的实现思路与C++代码示例。

一.题目

Remove Element

  Total Accepted: 48066 Total Submissions: 148276My Submissions

Given an array and a value, remove all instances of that value in place and return the new length.

The order of elements can be changed. It doesn't matter what you leave beyond the new length.

Show Tags
Have you met this question in a real interview?  
Yes
 
No

Discuss






二.解题技巧

    这道题和Remove Duplicates from Sorted Array类似,不同的是这里只要删除值等于给定值的元素即可,可以采用和前面的题相同的做法:可以将原来的数组看作一个栈,设定一个栈顶指针,在对数组进行遍历的时候,判断元素是否等于给定值,如果等于,则直接进行数组的下一个元素,如果不等于,则将该元素放入到栈顶,然后更新指针并处理数组的下一个元素。之所以能这么做,是因为我们在遍历过程中,对于数组元素的访问的下标总是不小于栈顶指针的,因此,可以将原来的数组直接当作一个栈来使用,这样就能做到in-place处理了。
    这道题相对比较简单,也没有多少边界条件要考虑,是一道练手的题。这里在进行删除后数组的元素的个数的统计的时候,有一个技巧,即栈顶指针就已经说明了数组中元素的个数了,因此,可以直接返回栈顶指针就可以了(这里的栈顶指针是用数组的下标表示的)。当然,也可以统计等于给定值的元素的个数,然后用原来的数组个数减去该值就可以得到新的数组的值了。


三.实现代码

class Solution
{
public:
    int removeElement(int A[], int n, int elem)
    {
        int TrueIndex = 0;
        for (int Index = 0; Index < n; Index++)
        {
            if (A[Index] != elem)
            {
                A[TrueIndex] = A[Index];
                TrueIndex++;
            }
        }

        return TrueIndex;
    }
};




四.体会

    这道题还是一道很简单的题目的,代码简短,边界条件也基本没有,很适合练手用。



版权所有,欢迎转载,转载请注明出处,谢谢微笑





### JavaScript 中数组的 removeElement 实现 在 JavaScript 里,没有原生的 `removeElement` 函数,但可自定义函数来实现从数组中移除元素的功能。比如,`addElement` 函数借助 `push` 方法把新值添加到数组末尾,`removeElement` 函数使用 `splice` 方法移除指定索引处的元素。示例代码如下: ```javascript function addElement(arr, value) { arr.push(value); return arr; } function removeElement(arr, index) { if (index > -1 && index < arr.length) { arr.splice(index, 1); } return arr; } let myArray = [1, 2, 3, 4, 5]; console.log(removeElement(myArray, 2)); // 移除索引为 2 的元素 ``` 上述代码中,`removeElement` 函数接收数组和索引作为参数,通过 `splice` 方法移除指定索引处的元素 [^1]。 ### Java 中 Vector 的 removeElement 方法 在 Java 里,`Vector` 类有 `removeElement` 方法,用于移除指定对象的首个出现项。示例代码如下: ```java import java.util.*; public class RemoveElementOfVector { public static void main(String[] args) { Vector<String> v = new Vector<String>(10); v.add("C"); v.add("C++"); v.add("JAVA"); v.add("C++"); v.add("JAVA"); System.out.println("v: " + v); v.removeElement("JAVA"); System.out.println("v.removeElement(JAVA): " + v); } } ``` 此代码定义了一个 `Vector` 对象,添加元素后,使用 `removeElement` 方法移除首个出现的 `"JAVA"` 元素 [^2]。 ### LeetCode 相关问题的 removeElement 实现 在 LeetCode 问题中,有移除数组中指定元素并返回新数组长度的需求。例如,在已排序数组里移除重复元素,或者移除指定元素。 以下是一个使用双指针方法实现移除指定元素的 Python 代码示例: ```python class Solution: def removeElement(self, A, elem): f = 0 while f != len(A): if A[f] == elem: A.pop(f) else: f += 1 return len(A) ``` 此代码通过遍历数组,若当前元素等于指定元素,则使用 `pop` 方法移除该元素,最终返回新数组的长度 [^4]。 ### 另一种双指针实现思路 另一种常见的实现思路是使用双指针,一个指针遍历数组,另一个指针记录新数组的位置。以下是 Java 代码示例: ```java public class Solution { public int removeElement(int[] A, int elem) { int len = A.length, j = 0; for (int i = 0; i < len; i++) { if (A[i] != elem) { A[j] = A[i]; j++; } } return j; } } ``` 此代码中,`i` 指针遍历数组,`j` 指针记录新数组的位置,若当前元素不等于指定元素,则将其赋值给 `j` 指针指向的位置,最后返回 `j` 作为新数组的长度 [^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值