有序去重
时间复杂度:O(N)
思路:
1.双指针方法,一个用来遍历整体数组,另一个用来维护去重后的空间。
2.如果两个指向的数大小是不同的,则维护空间++,并且把新的数加进去。
int main()
{
int arr[] = { 1,2,3,3,5,5,8,8 };
int num = 0;
for (int i = 1; i < sizeof(arr) / sizeof(arr[0]); i++)//默认第一个是符合的,从第二个数开始遍历
{
if (arr[num] != arr[i])
{
num++;
arr[num] = arr[i];//注意两句的逻辑顺序
}
}
return 0;
}
无序去重
时间复杂度:O(N^2)
思路:
1.和有序去重思路相似,建立双指针。
2.不同的是判断是否重复,每一次判断都需要在已经去重的范围里循环一遍。
int main()
{
int arr[] = { 1,5,6,2,3,8,7,9,9,6,5,2 };
int num = 1;
for (int i = 1; i < sizeof(arr) / sizeof(arr[0]); i++)
{
int flag = 1;
for (int j = 0; j < num; j++)
{
if (arr[j] == arr[i])
{
flag = 0;
break;
}
}
if (flag)
{
arr[num++] = arr[i];
}
}
return 0;
}
纸上得来终觉浅,绝知此事要躬行。
感谢各位佬的观看,点个关注再走吧ლ(°◕‵ƹ′◕ლ)