26. 删除有序数组中的重复项 Leetcode经典面试题

2024-02-20 19:13:26 浏览数 (1)

 这个也是使用双指针的方式,但是基于数组。

  1. 使用两个指针 ni,其中 n 用于标记新数组的长度,初始值为0,而 i 用于遍历原始数组 nums
  2. 从头开始遍历 nums 数组,对于每个元素 nums[i],进行以下检查:
    • 如果 nums[n] 不等于 nums[i],表示找到了一个新的不重复的元素,将其复制到新数组的下一个位置(nums[ n] = nums[i])。
    • 如果 nums[n] 等于 nums[i],表示这是一个重复元素,跳过它。
  3. 继续遍历整个数组,直到 i 到达数组的末尾。
  4. 返回 n 1 的值,这个值表示新数组的长度,其中 n 是新数组的最后一个元素的索引,再加1。

这个算法通过只遍历一次数组,将不重复的元素逐个复制到新数组的开头,并保持新数组的长度,实现了从已排序数组中去除重复元素的目的。这是一种高效的方式,因为它只需要一次遍历数组,时间复杂度为 O(n),其中 n 是数组的长度。

举个例子,如果原始数组 nums[1, 1, 2, 2, 2, 3, 4, 4, 5],使用这个算法后,新数组会变成 [1, 2, 3, 4, 5],同时返回值 n 1 为 5,表示新数组的长度。

代码语言:javascript复制
class Solution {
    public int removeDuplicates(int[] nums) {
        int n=0;
        for(int i=0;i<nums.length;i  ){
            if(nums[n]!=nums[i]){
                nums[  n]=nums[i];
            }
        }
        return n 1;
    }
}

0 人点赞