Remove Duplicates from Sorted Array
题意如下:
对于给定的数组:
1,1,2,2,2,3
去掉重复后返回数组长度 如上为 1,2,3 长度为3
直接运用c++库函数
int removeDuplicates(int A[], int n) {
return distance(A, unique(A, A + n));
}
unique()为将A中数据重新排列,如上 1,1,2,2,2,3重新排列后为 1,2,3,1,2,2
返回值为 没有重复数据的最后一个 地址 ,如上返回值为A+3
distance为求两者之间地址。返回即为没有重复数据长度。
非库函数法:
class Solution {
public:
int removeDuplicates(int A[], int n) {
if(0==n)
return 0;
int index;
int i=1;
index=0;
int temp=1;
while(index<n&&i<n)
{
if(A[index]!=A[i])
{
temp++;
A[++index]=A[i];
i++;
}
else{
i++;
}
}
return temp;
}
};
用temp来记录不相同元素个数,index来记录当前没有重复数据位置点,i来遍历数组中的所有数据
当index和i处值不相同时,将i处值复制到index处,否则,i往后遍历。
Remove Duplicates from Sorted Array 2
对于给定的数组:
1,1,2,2,2,3
允许出现重复数据,最多两次 如上为 1,1,2,2,3 长度为5
代码如下
class Solution {
public:
int removeDuplicates(int A[], int n) {
if(0==n)
return 0;
if(1==n)
return 1;
int index=0;
int temp=0;
int i;
for(i=1;i<n;i++)
{
if(A[index]!=A[i])
{
A[++index]=A[i];
temp=0;
}
else if(temp==0&&A[index]==A[i])
{
temp=1;
A[++index]=A[i];
}
}
return index+1;
}
};
用了一个标记temp,temp的意思是如果相等、不相等间隔出现才交换,没有间隔出现 如 1,1,1,1,1,1,1 那么temp的值不会间隔改变,就不用交换了
而如果temp值变换如 1,1,1,2,2,2表示跳到其他阶段在交换。