首页 leetcode

283. 移动零

题目描述

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/move-zeroes
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

输入样例:

[0,1,0,3,12]

输出样例:

[1,3,12,0,0]

ac代码

// while 写法:
impl Solution {
    pub fn move_zeroes(nums: &mut Vec<i32>) {
        // 思路:遍历,将非零存到一个数组里面,
        // 后面补充零
        // 时间复杂度:O(n)
        let mut i = 0;
        let mut j = 0;
        // 注意这里要设置成可变的
        // i 为已经存在非零的元素
        // j 为当前正在处理的位置
        while j < nums.len() { // 遍历
            if nums[j] != 0 { // 遍历过程中如果出现不为零的数
                nums[i] = nums[j];
                 i += 1;
            }
            j += 1;
        }
        while i < j {
            nums[i] = 0;
            i += 1;
        }
    }
}

// fn main() {
//     let mut vec: Vec<i32> = vec![0, 1, 0, 3, 12];
//     move_zeroes(&mut vec);
//     println!("{:?}", vec);
// }

// for 写法:
impl Solution {
    pub fn move_zeroes(nums: &mut Vec<i32>) {
        let mut i = 0;
        for j in 0..nums.len() {
            if nums[j] !+ 0 {
                nums[i] = nums[j];
                i += 1;
            }
        }
        for k in i..nums.len() {
            nums[k] = 0;
        }
    }
}



文章评论