{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# [27. 移除元素](https://leetcode.cn/problems/remove-element)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 题目描述 \n", "\n", "给你一个数组 `nums` 和一个值 `val`,你需要 **[原地](https://baike.baidu.com/item/%E5%8E%9F%E5%9C%B0%E7%AE%97%E6%B3%95)** 移除所有数值等于 `val` 的元素。元素的顺序可能发生改变。然后返回 `nums` 中与 `val` 不同的元素的数量。\n", "\n", "假设 `nums` 中不等于 `val` 的元素数量为 `k`,要通过此题,您需要执行以下操作:\n", "\n", "- 更改 `nums` 数组,使 `nums` 的前 `k` 个元素包含不等于 `val` 的元素。`nums` 的其余元素和 `nums` 的大小并不重要。\n", "- 返回 `k`。\n", "\n", "**用户评测:**\n", "\n", "评测机将使用以下代码测试您的解决方案:\n", "\n", "```txt\n", "int[] nums = [...]; // 输入数组\n", "int val = ...; // 要移除的值\n", "int[] expectedNums = [...]; // 长度正确的预期答案。\n", " // 它以不等于 val 的值排序。\n", "\n", "int k = removeElement(nums, val); // 调用你的实现\n", "\n", "assert k == expectedNums.length;\n", "sort(nums, 0, k); // 排序 nums 的前 k 个元素\n", "for (int i = 0; i < actualLength; i++) {\n", " assert nums[i] == expectedNums[i];\n", "}\n", "```\n", "\n", "如果所有的断言都通过,你的解决方案将会 **通过**。\n", "\n", "**示例 1:**\n", "\n", "```txt\n", "输入:nums = [3,2,2,3], val = 3\n", "输出:2, nums = [2,2,_,_]\n", "解释:你的函数函数应该返回 k = 2, 并且 nums 中的前两个元素均为 2。\n", "你在返回的 k 个元素之外留下了什么并不重要(因此它们并不计入评测)。\n", "```\n", "\n", "**示例 2:**\n", "\n", "```txt\n", "输入:nums = [0,1,2,2,3,0,4,2], val = 2\n", "输出:5, nums = [0,1,4,0,3,_,_,_]\n", "解释:你的函数应该返回 k = 5,并且 nums 中的前五个元素为 0,0,1,3,4。\n", "注意这五个元素可以任意顺序返回。\n", "你在返回的 k 个元素之外留下了什么并不重要(因此它们并不计入评测)。\n", "```\n", "\n", "**提示:**\n", "\n", "- `0 <= nums.length <= 100`\n", "- `0 <= nums[i] <= 50`\n", "- `0 <= val <= 100`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 解答" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "class Solution(object):\n", " def removeElement(self, nums, val):\n", " \"\"\"\n", " :type nums: List[int]\n", " :type val: int\n", " :rtype: int\n", " \"\"\"\n", " slow_index = 0\n", " for fast_index in range(len(nums)):\n", " if nums[fast_index] != val:\n", " nums[slow_index] = nums[fast_index]\n", " slow_index += 1\n", " return slow_index, nums[:slow_index]" ] }, { "cell_type": "code", "execution_count": 3, "id": "ac31a7c1", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "原始数组: 3223\n", "原始数组长度: 4\n", "剔除3后数组: (2, [2, 2])\n" ] } ], "source": [ "solution = Solution()\n", "nums = [3,2,2,3]\n", "val = 3\n", "print('原始数组:',''.join(map(str, nums)))\n", "print('原始数组长度:', len(nums))\n", "print('剔除3后数组:', solution.removeElement(nums, val)) # Output: 2" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" } }, "nbformat": 5, "nbformat_minor": 10 }