Rust 移動零
阿新 • • 發佈:2020-07-28
移動零
給定一個數組 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) }