首页 > 编程语言 > 详细

leetcode26:删除排序数组中的重复项

时间:2020-03-11 22:30:18      阅读:92      评论:0      收藏:0      [点我收藏+]

题目

技术分享图片

思路

首先从题干中找出关键信息:

  • 排序数组
  • 原地删除
  • 不使用额外的数组空间

对于数组来说,在尾部进行元素的增删,时间复杂度只有o(1),但在数组中间或者开头进行元素的增删,由于涉及到元素的搬运,时间复杂度就变为o(n).因此对于一般的数组处理问题,要尽可能的在尾部对元素进行处理,这样就可以避免额外的时间复杂度。本题给的数组是已经排好序的,可以很容易的通过前后比较找出重复元素,但是这样就会导致在数组的非尾部区域进行操作,为了避免这种问题,可以将数组中的重复元素搬运到尾部进行处理,这样就会得到理想的时间复杂度。

可以使用链表中经常用到的快慢指针来求解此问题。设定一个fast和slow,分别指向索引1和0的位置,让fast在前面探路,如果找到不重复的元素,就让slow前进一个,这样fast遍历结束,[0,slow]就是不重复的元素。

题解

C++:

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int n= nums.size();
        if(!n) return 0;
        int fast=1,slow=0; 
        while(fast<n)
         {
             if(nums[fast]!=nums[slow])
             {
             nums[++slow]=nums[fast]; //保证[0,slow]内无重复元素
             }
             fast++;   
         }
        return slow+1;
        } 
};

Python:

class Solution(object):
    def removeDuplicates(self, nums):
        n=len(nums)
        if(n==0):
            return 0
        fast,slow=1,0
        while(fast<n):
            if(nums[fast]!=nums[slow]):
                slow+=1
                nums[slow]=nums[fast]
            fast+=1
        return slow+1

参考

  1. https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/

  2. 微信公众号:labuladong

leetcode26:删除排序数组中的重复项

原文:https://www.cnblogs.com/depth-perception/p/12465265.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!