题目
将有序数组去重并且打印去重之后的长度。
思想
快慢指针思想,(逻辑上的指针,并非 * 这个指针)。定义两个指针slow,fast。fast逐个遍历元素,如果与slow不同,则把slow所指元素打印出来,如果与slow所指元素相同,则fast+1,直至遍历结束。
代码示例
#include <iostream>
using namespace std;
void ramoveDuplication(int* num, int length);
int main() {
int num[] = {1,1,2,3,3,4,4,4,5,6,7,7};
int length = 0;
length = (sizeof(num)) / (sizeof(int));
ramoveDuplication(num, length);
return 0;
}
//有序数组去重
void ramoveDuplication(int* num, int length) {
int slow, fast;
slow = 0;
fast = 1;
cout << "去重之后为" << endl;
for (int i = 0; i < length; i++) {
if (num[fast] != num[slow]) {
cout << num[slow]<<' ';
slow++;
num[slow] = num[fast];
}
fast++;
}
cout << "新长度为" << slow;
}