This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

0250-0299

Solutions to LeetCode Problems 0250-0299.

1 - 0283.移动零

方法一:双指针

时间复杂度 $O(n)$,空间复杂度 $O(1)$。

impl Solution {
    pub fn move_zeroes(nums: &mut Vec<i32>) {
        let (mut i, mut j) = (0, 0);
        while j < nums.len() {
            if nums[j] != 0 {
                nums[i] = nums[j];
                i += 1;
            }
            j += 1;
        }
        while i < nums.len() {
            nums[i] = 0;
            i += 1;
        }
    }
}

2 - 0287.寻找重复数

方法一:快慢指针

时间复杂度 $O(n)$,空间复杂度 $O(1)$。

impl Solution {
    pub fn find_duplicate(nums: Vec<i32>) -> i32 {
        let mut slow = nums[0] as usize;
        let mut fast = nums[nums[0] as usize] as usize;
        while slow != fast {
            slow = nums[slow] as usize;
            fast = nums[nums[fast] as usize] as usize;
        }
        let mut slow = 0 as usize;
        let mut fast = fast as usize;
        while slow != fast {
            slow = nums[slow] as usize;
            fast = nums[fast] as usize;
        }
        slow as i32
    }
}