描述
在一个已经排序的数组中,移除掉重复元素,保证每个元素只出现一次,返回移除元素后数组的长度;
不可以重新生成一个数组,必须在常量内存中进行操作;
例如:
输入元素:A = [1, 1, 2];
需要返回:length = 2, 新的数组为[1, 2];
分析
数组是有序数组,意味着:
1)第一个元素一定是可以存在于最终结果数组中;
2)相同的元素连续存放在数组中;
3)相邻的元素只能是相同或者不相同;
依此分析,设定两个游标:
第一个游标指示为新数组的结尾元素,初始值为0;
第二个游标指示为下一个需要判断的元素,初始值为1;
依上设定,运行逻辑为:
第二个游标指示的元素和第一个游标指示的元素不相同,则将第一个游标后移一位,将第二个游标指示的元素赋值给第一个游标指示的位置;
实现
int removeDuplicatesFromSortedArray(int A[], int n)
{
if(n==0) {
return 0;
}
int index = 0;
for(int i=1; i<n; i++) {
if (A[i] != A[index]) {
A[++index] = A[i];
}
}
return index + 1;
}
网友评论