Rust 移动零

移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

示例:

输入: [0,1,0,3,12]
输出: [1,3,12,0,0]

说明:

  1. 必须在原数组上操作,不能拷贝额外的数组。
  2. 尽量减少操作次数。

两种方案:

第一种排水法(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)
    }

 

 

posted @ 2020-07-28 14:56  州长在手  阅读(186)  评论(0编辑  收藏  举报