
#include <stdio.h>
int main() {
// 有序列表的去重
int arr[] = {1,2,2,3,3,3,5,6,7,7,7,7,8,8,9,9,9};
int len = sizeof(arr)/4;
int mark[len] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int k = 0;
// 打印数组
printf("原始数组: ") ;
for(int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
// 统计重复的数字,用k进行累加
// 也就是重复数字后面的不重复的数字应该向前移动多少位
// 并保存到mark数组中
for(int i = 0; i < len; i++) {
if (arr[i] == arr[i+1]) {
k++;
} else {
mark[i] = k;
}
}
// 开始去重
for(int i = 0; i < len; i++) {
arr[i - mark[i]] = arr[i];
}
// 打印共有多少个重复数字
printf("\n");
printf("重复数字k: %d个", k);
printf("\n", k);
printf("mark: ") ;
// 打印mark
for(int i = 0; i < len; i++) {
printf("%d ", mark[i]);
}
printf("\n");
// 打印已经去重的有序列表
printf("已去重的数组: ") ;
for(int i = 0; i < len-k; i++) {
printf("%d ", arr[i]);
}
return 0;
}