编程题:
问题描述:在一个递增有序的数组中,有数值相同的元素存在,程序的功能是去掉数组相同的元素
代码如下:
#include <stdio.h>
/*
思路:通过遍历寻求唯一的数组元素 然后插入到一个新的数组中
返回新开辟的数组即可(删除重复的元素)
时间复杂度 o(n)
空间复杂度 o(n)
*/
int main(){
int number[9] = { 7, 10, 10, 21, 30, 42, 42, 42, 51 };
int unique[15];
int count = 0;
int len = 9;
int i;
for (i = 0; i < len; i++){
if (number[i] != number[i + 1])
unique[count++] = number[i];
}
for (i = 0; i < count; i++)
printf("%d ", unique[i]);
return 0;
}
优化代码:
#include <stdio.h>
/*
思路:定义一个指针保留数组首地址 通过遍历寻求唯一的数组元素 (从而保存着原有的数组中)
时间复杂度 o(n)
空间复杂度 o(1)
*/
int main(){
int number[15] = { 7, 10, 10, 21, 30, 42, 42, 42, 51 };
int count = 0;
int len = sizeof(number) / sizeof(number[0]);//开辟整个数组长度(而非只使用的长度)
int *p;
p = number;
int i = 0;
while (len--){
if (*p != *(p + 1))
number[i++] = *p;
p++;
}
i--;//要不然会多存储一个0
for (int j = 0; j<i; j++)
printf("%d ", number[j]);
return 0;
}