算法--删除数组中的重复项

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

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

给定数组 nums = [1,1,2],

函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。

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


这道题我们可以不能构造数组来接收自己找到的数组,必须在原数组上进行修改,用后面的值来覆盖前面的值,并且数组除了重复的元素是一个递增的数组,这样我们就可以采用双指针来解答
思路:有一个左指针i,有一个右指针j,左指针从下标0开始,右指针比左指针大,大多少我们是不知道的,但刚开始的初值为i=0和j=1。当遇到nums[i] != nums[j],将nums[i+1] = nums[j] 同时 i+1,j+1,移动到下一个位置。如果nums[j] == nums[j],右指针+1,一个循环到数组的末尾(我也是借鉴的leetcode上大神写的,但你别说,他们代码写得是真的牛鼻)。

public int removeDuplicates(int[] nums) {
    if(nums.length == 0){
      return 0;
    }
    //右指针
    int j = 1;
    //左指针
    int i = 0;
    while (j < nums.length){
      //如果不相等,就将j那个位置的元素覆盖掉i+1上的元素
      if(nums[j] != nums[i]){
        nums[i+1] = nums[j];
        //指针右指针右移
        i++;
      }
      //左指针右移
      j++;
    }
    return i+1;
  }

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

你可能感兴趣的:(算法--删除数组中的重复项)