问题如下:
给定一个整数数组 nums 和一个整数 val,删除 nums 中所有出现的 val in-place。元素的顺序可以改变。然后返回nums中不等于val.
的元素个数考虑nums中不等于val的元素个数为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如果所有断言都通过,那么您的解决方案将被接受。
示例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).这是我解决的方法:
为了解决这个问题,我主要使用了两种策略:
- 就地替换:不是创建一个新数组来存储不等于val的元素,而是使用同一个数组nums覆盖需要移除的元素。
- 双指针技术:一个指针 (i) 迭代数组中的每个元素,另一个指针 (k) 跟踪下一个非 val 元素应放置的位置。
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
这是完整的解决方案:
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
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3