0026. 删除有序数组中的重复项 Remove Duplicates from Sorted Array

问题描述

要注意的一点是, 这个数组已经是有序的了.

方法1, 快慢型双指针法

快慢型双指针法的详细说明, 可以参考这里.

two-pointers

#![allow(unused)]
fn main() {
// 快慢型双指针 Two pointers
#[allow(clippy::ptr_arg)]
pub fn remove_duplicates2(nums: &mut Vec<i32>) -> i32 {
    assert!(!nums.is_empty());
    // 第一个指针, 用于记录当前不重复的位置
    let mut slow_idx = 1;
    // 第二个指针, 用于遍历数组
    for fast_idx in 1..nums.len() {
        if nums[fast_idx - 1] != nums[fast_idx] {
            nums[slow_idx] = nums[fast_idx];
            slow_idx += 1;
        }
    }
    slow_idx as i32
}
}

方法2, 使用 Vec 自带的去重方法

Vec::dedup() 就是用来去重的, 如果它已经是排序的了, 可以去掉所有重复元素.

#![allow(unused)]
fn main() {
// Vec 的去重函数, 支持已排序的
pub fn remove_duplicates3(nums: &mut Vec<i32>) -> i32 {
    nums.dedup();
    nums.len() as i32
}
}

相关问题