Leetcode题解之数组(1)从排序数组中删除重复项

题目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/1/array/21/

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

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

 

解题思路:

利用快慢指针思想,用两个标记对同一个数组进行遍历。开始时快慢指针都指向开头,接下来快指针先向下遍历,遇到不同的元素时,将慢指针移动,并且使慢指针指向的元素替换为不同的元素。以此类推,最终获得的j+1便是所需要目标数组的长度。

代码:

class Solution {
    public int removeDuplicates(int[] nums) {
    if (nums == null || nums.length == 0) {
            return 0;
    }
    int i=0;
    int j=0;
    for(;i<nums.length;i++){
        if(nums[i]!=nums[j])
            nums[++j]=nums[i];
        }
          return j+1;
    }
  
}

 

反思:

    刚开始时,只想用一个指针来操作,想通过两个for循环循环来将改变后的数组,全部下表前移 ……时间复杂度太高了,而且不好实现。

    原文作者:算法
    原文地址: https://www.twblogs.net/a/5bdddede2b717720b51af3f3
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞