1. 程式人生 > 實用技巧 >Rust 移動零

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)
    }