Leetcode Day 删除元素解释

WBOY
发布: 2024-07-16 19:46:46
原创
1155 人浏览过

Leetcode Day Remove Element Explained

问题如下:

给定一个整数数组 nums 和一个整数 val,删除 nums 中所有出现的 val 就地。元素的顺序可以改变。然后返回 nums 中不等于 val.

的元素个数

考虑 nums 中不等于 val 的元素数量为 k,要被接受,您需要执行以下操作:

  • 更改数组 nums,使 nums 的前 k 个元素包含不等于 val 的元素。 nums 的其余元素以及 nums 的大小并不重要。
  • 返回k。

自定义法官:

法官将使用以下代码测试您的解决方案:

int[] nums = [...]; // Input array
int val = ...; // Value to remove
int[] expectedNums = [...]; // The expected answer with correct length.
                            // It is sorted with no values equaling val.

int k = removeElement(nums, val); // Calls your implementation

assert k == expectedNums.length;
sort(nums, 0, k); // Sort the first k elements of nums
for (int i = 0; i < actualLength; i++) {
    assert nums[i] == expectedNums[i];
}
登录后复制

如果所有断言都通过,那么您的解决方案将被接受。

示例1:

Input: nums = [3,2,2,3], val = 3
Output: 2, nums = [2,2,_,_]
Explanation: Your function should return k = 2, with the first two elements of nums being 2.
It does not matter what you leave beyond the returned k (hence they are underscores).
登录后复制

示例2:

Input: nums = [0,1,2,2,3,0,4,2], val = 2
Output: 5, nums = [0,1,4,0,3,_,_,_]
Explanation: Your function should return k = 5, with the first five elements of nums containing 0, 0, 1, 3, and 4.
Note that the five elements can be returned in any order.
It does not matter what you leave beyond the returned k (hence they are underscores).
登录后复制

这是我解决的方法:

为了解决这个问题,我使用了两个主要策略:

  1. 就地替换:不是​​创建一个新数组来存储不等于val的元素,而是使用相同的数组nums覆盖需要移除的元素。
  2. 双指针技术:一个指针 (i) 迭代数组中的每个元素,另一个指针 (k) 跟踪下一个非 val 元素应放置的位置。
  • 首先,初始化指针 k 并将其设置为 0。这将跟踪下一个非 val 元素应放置的位置。
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:       
    k = 0
登录后复制
  • 迭代 nums 数组。
  • 检查当前元素 nums[i] 是否与 val 不同以跟踪 k。
  • 如果是,则将元素 nums[i] 移动到第 k 个位置,并将 k 加 1 以更新下一个非 val 元素的位置。
for i in range(len(nums)):
    if nums[i] != val:
        nums[k] = nums[i]
        k += 1
登录后复制
  • 返回k,即不等于val的元素个数。
return k
登录后复制

这是完整的解决方案:

class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        k = 0
        for i in range(len(nums)):
            if nums[i] != val:
                nums[k] = nums[i]
                k += 1
        return k
登录后复制

以上是Leetcode Day 删除元素解释的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!