Leetcode:26 Remove Duplicates from Sorted Array

问题描述:

Given a sorted array, remove the duplicates in-place such that each element appear only once and return the new length.

Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.

解决思路:

对于此类问题,对于存储空间的要求比较严格,对于数组而言,简化空间的使用,那么可以在本身的基础上通过覆盖赋值来减小空间复杂度,从而实现题目所要求的O(1)的时间复杂度。

核心代码如下:

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int tag=1;    //作为在原数组上创造新数组的赋值标记,第一个数不用管 
       for(int i=1;i<nums.size();i++)
       if(nums[i]==nums[i-1])  continue; //如果对于升序序列中连续相等的话,原标i递增,tag不变 
	   else nums[tag++]=nums[i];           //如果对于升序序列不相等的话,则在新数组的基础上赋值那个不相等的元素 
        return tag;
    }
};
因为新数组的赋值在旧数组上是相对之前的,所以新的赋值不会对后续的对与旧数组的操作产生影响,因此可以巧妙的赋值。

猜你喜欢

转载自blog.csdn.net/C_acgl/article/details/78595017