返回

算法技巧:熟练掌握 LeetCode 移除元素(No.27)

见解分享

算法简介

题目: 给定一个整数数组 nums 和一个目标值 val,请你移除所有等于 val 的元素,并返回移除后数组的新长度。

示例:

输入:nums = [3,2,2,3], val = 3
输出:2
解释:移除所有等于 3 的元素后,nums = [2,2]

思考:

要有效地解决这个问题,我们需要考虑以下几点:

  • 数组遍历: 我们需要遍历整个数组以查找等于 val 的元素。
  • 元素移除: 一旦找到要移除的元素,我们需要将其从数组中删除。
  • 数组长度调整: 删除元素后,我们需要相应地调整数组的长度。

实现:

Python:

def removeElement(nums, val):
    i = 0
    while i < len(nums):
        if nums[i] == val:
            nums.pop(i)  # 移除元素
        else:
            i += 1  # 继续遍历
    return len(nums)

Java:

public int removeElement(int[] nums, int val) {
    int i = 0;
    for (int j = 0; j < nums.length; j++) {
        if (nums[j] != val) {
            nums[i] = nums[j];  # 覆盖不等于 val 的元素
            i++;
        }
    }
    return i;
}

C++:

int removeElement(vector<int>& nums, int val) {
    int i = 0;
    for (int j = 0; j < nums.size(); j++) {
        if (nums[j] != val) {
            nums[i++] = nums[j];
        }
    }
    return i;
}

总结

通过解决 LeetCode 上的第 27 号问题:“移除元素”,我们了解了如何有效地遍历和修改数组。我们还讨论了在实现中考虑的要点,例如数组遍历、元素移除和数组长度调整。希望这篇文章能帮助你加深对算法的理解,并在未来的编程挑战中取得成功。