欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-01-15 11:59:46
...

题目: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循环循环来将改变后的数组,全部下表前移 ......时间复杂度太高了,而且不好实现。

相关标签: leetcode