leetcode探索初级算法-数组[删除排序数组中的重复项]

目录

  • 1.题目描述
  • 2. 题目解析
  • 3.题目思路
  • 4.实现代码

1.题目描述

给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

你不需要考虑数组中超出新长度后面的元素。

原题链接

2. 题目解析

这里有两点需要注意的:

  1. 给定的数组是有序数组,否则以下解法无法成立(如[1,1,2,1,1])
  2. 因为java的数组初始化后,长度不能改变,且题目要求原地修改输入数组,所以题目中特别说明”你不需要考虑数组中超出新长度后面的元素“

3.题目思路

此题可使用双指针法,第一个指针指向不重复的数字的索引,第二个指针遍历数组。

官方题解

4.实现代码

public static int returnNoSameNum(int[] nums) {
    if(nums.length == 0) return 0;
    int i = 0;
    for(int j = 1; j < nums.length; j++) {
        if(nums[j] != nums[i]) {
            i++;
            nums[i] = nums[j];
        }
    }
    return i + 1;
}

你可能感兴趣的:(leetcode探索初级算法-数组[删除排序数组中的重复项])