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

来源:互联网 发布:淘宝店铺开通花呗支付 编辑:程序博客网 时间:2024/05/09 14:18

描述:给定一个有序数组,移除数组中重复出现三次或三次以上的数字。

输入:A={1,1,2,2,2,3,3,3,3};

输出:length= 6;A={1,1,2,2,3,3};

思路一:由于数组是有序的,遍历数组,依次判断当前元素是否与左右元素相等,若等则跳过否则将当前元素加入添加位置。时间复杂度为线性,空间复杂度为1;

class Solution{public:int remove(int A[],int n){if(n<=2)return n;int index=1;for(int i=1;i<n-1;i++){if(A[i]==A[i-1]&&A[i]==[i+1])continue;A[index++]=A[i];}A[index++]=A[n-1];return index;}}; 
思路二:由于数组是有序的,可从第三个元素开始遍历,若当前元素与前第二位元素相等,则必定与前一位元素相等,则跳过否则加入添加位置。时间复杂度为线性,空间复杂度为1;

class Solution{public:int remove(int A[],int n){if(n<=2)return n;        int index=2;        for(int i=2;i<n;i++)        {        if(A[i]!=A[index-2])        A[index]=A[i];}return index++;}}; 
扩展:若要求删除重复四次的数字,则利用思路二比较前第三位数字是否相等即可。


0 0
原创粉丝点击