算法leetcode|27. 移除元素(rust重拳出击)
Posted 二当家的白帽子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法leetcode|27. 移除元素(rust重拳出击)相关的知识,希望对你有一定的参考价值。
文章目录
27. 移除元素:
给你一个数组 nums
和一个值 val
,你需要 原地 移除所有数值等于 val
的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1)
额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
样例 1:
输入:
nums = [3,2,2,3], val = 3
输出:
2, nums = [2,2]
解释:
函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。
样例 2:
输入:
nums = [0,1,2,2,3,0,4,2], val = 2
输出:
5, nums = [0,1,4,0,3]
解释:
函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。
提示:
0 <= nums.length <= 100
0 <= nums[i] <= 50
0 <= val <= 100
分析:
- 面对这道算法题目,二当家的陷入了沉思。
- 由于需要原地修改,所以需要用双指针,分别指向正在检查的位置和新数组的长度。
- 但是标注新数组的长度的指针,有两种方式,一种是从小到大,即如果碰到不是指定的元素就移动指针,否则就保持不动。还有一种方式是新数组的指针开始放在最后,从大到小,碰到是指定的元素就用尾部的元素覆盖并且缩小新数组的长度。
题解:
rust
impl Solution
pub fn remove_element(nums: &mut Vec<i32>, val: i32) -> i32
let (mut left, mut right) = (0, nums.len() - 1);
while left as i32 <= right as i32
if nums[left] == val
nums[left] = nums[right];
right -= 1;
else
left += 1;
return left as i32;
go
func removeElement(nums []int, val int) int
left, right := 0, len(nums)-1
for left <= right
if nums[left] == val
nums[left] = nums[right]
right--
else
left++
return left
c++
class Solution
public:
int removeElement(vector<int>& nums, int val)
int left = 0, right = nums.size() - 1;
while (left <= right)
if (nums[left] == val)
nums[left] = nums[right];
--right;
else
++left;
return left;
;
c
int removeElement(int* nums, int numsSize, int val)
int left = 0, right = numsSize - 1;
while (left <= right)
if (nums[left] == val)
nums[left] = nums[right];
--right;
else
++left;
return left;
python
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
left, right = 0, len(nums) - 1
while left <= right:
if nums[left] == val:
nums[left] = nums[right]
right -= 1
else:
left += 1
return left
java
class Solution
public int removeElement(int[] nums, int val)
int left = 0, right = nums.length - 1;
while (left <= right)
if (nums[left] == val)
nums[left] = nums[right];
--right;
else
++left;
return left;
非常感谢你阅读本文~
欢迎【点赞】【收藏】【评论】~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 二当家的白帽子:https://le-yi.blog.csdn.net/ 博客原创~
以上是关于算法leetcode|27. 移除元素(rust重拳出击)的主要内容,如果未能解决你的问题,请参考以下文章