移除有序数组中的重复数字

来源:互联网 发布:protocol buffer json 编辑:程序博客网 时间:2024/05/22 05:11

描述:给定一个有序数组,移除数组中重复的数字并保证当前数字只出现一次,最后返回移除后的数组长度。

     如:输入:array A={1,1,2}; 输出:length=2;A={1,2};

思路一:申请一个新数组,并从第二位数组元素开始遍历,将每个元素与加入新数组的元素进行比较,若相等则跳过否则加入新数组中。时间复杂度为线性,空间复杂度为线性;

class solution{public:int remove(int &A[],int n){if(n==0)return 0;int *B=(int *)malloc(sizeof(int)*n);*B=A[0];                int len=1;                for(int i=1;i<n;i++){if(*B==A[i])continue;++*B=A[i];                        ++len;                         }                return  len; }};
思路二:可以不必申请空间直接在原数组上标记未重复元素的位置。时间复杂度为线性,空间复杂度为1;
class solution{public:int remove(int &A[],int n){if(n==0)return 0;int index=0;for(int i=1;i<n;i++){if(A[index]!=A[i])A[++index]=A[i];}index++;return index;}};
思路三:可以直接使用C++STL。时间复杂度为线性,空间复杂度为1;

#include<algorithm>class solution{public:int remove(int &A[],int n){return distance(A,unique(A,A+n));};



0 0
原创粉丝点击