Rust 移动零
移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入:[0,1,0,3,12]输出:[1,3,12,0,0]
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
两种方案:
第一种排水法(drain) 标准库里的drain函数挺有意思。
思路不是0就添加到vec末尾,新vec长度与之前的长度的2倍比较,不够就补充0。然后drain(..len) ,排出去。
let len0 = nums.len();
for i in 0..len0{
if nums[i] != 0 {
nums.push(nums[i])
}
}
let len1 = nums.len();
for _ in len1..2*len0{
nums.push(0)
}
nums.drain(..len0);
第二种是替换法,先声明标志位,最开始是0。迭代数组,是0就不用管了,不是0,
标志位替换为这个数,然后标志位加1,继续迭代。最后标志位和长度之间的所有元素替换为0;
let len = nums.len();
let mut j = 0;
for i in 0..len{
if nums[i] != 0 {
nums[j] = nums[i];
j = j + 1;
}
}
for i in j..len{
nums[i] = 0;
}
for e in nums.iter(){
print!("{} ",e)
}

浙公网安备 33010602011771号