Giải bài 283 Move Zeroes O(N)

Đề bài:

Bài giải:

Python code

class Solution(object):
    def moveZeroes(self, nums):
        """
        :type nums: List[int]
        :rtype: void Do not return anything, modify nums in-place instead.
        """
        i = 0
        for j in xrange(len(nums)):
            if nums[j] != 0:
                nums[i], nums[j] = nums[j], nums[i]
                i += 1

Nhờ các bạn update code ngôn ngữ khác cho bài này nhé.

4 Likes

Rust

impl Solution {
    pub fn move_zeroes(nums: &mut Vec<i32>) -> Vec<i32> {
        let num_of_zeros = nums.iter().filter(|&n| *n == 0).count();
        nums.retain(|&x| x != 0);
        for _ in 0..num_of_zeros {
            nums.push(0);
        }
        Vec::from(&nums[..])
    }
}

Rust 2


impl Solution {
    pub fn move_zeroes(nums: &mut Vec<i32>) -> Vec<i32> {
    let len_nums = nums.len();
    nums.retain(|&x| x != 0);
    for _ in 0..(len_nums - nums.len()) {
        nums.push(0);
    }
    Vec::from(&nums[..])
}
}

p/s : Runtime càng bé thì code càng ngon à mn ?

1 Like

C++ 1 dòng :V :V :V

class Solution {
public:
    void moveZeroes(vector<int>& p) {
        fill(remove_if(begin(p), end(p), [](int n){ return !n; }), end(p), 0);
    }
};
5 Likes

Runtime có tính tương đối thôi. Đôi khi nó đúng là như vậy thật, nhưng đôi khi nó không chính xác. @Dao_An thử submit cùng một code xem, phần lớn số lần leetcode nó trả ra runtime khác nhau.

2 Likes

Nên chia trường hợp: lần đầu và lần sau (có cache).

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?