我想要一些逻辑,它会在数组中插入数字,同时它会检查数组中是否已存在当前数字。请帮我解释逻辑。
答案 0 :(得分:0)
删除数组中重复元素的代码
#include<stdio.h>
#include<conio.h>
void main()
{
int a[20], i, j, k, n;
clrscr();
printf("\nEnter array size : ");
scanf("%d",&n);
printf("\nEnter %d array element : ", n);
for(i = 0; i < n; i++)
{
scanf("%d",&a[i]);
}
printf("\nOriginal array is : ");
for(i=0;i< n;i++)
{
printf(" %d",a[i]);
}
printf("\nNew array is : ");
for(i=0; i < n; i++)
{
for(j=i+1; j < n; )
{
if(a[j] == a[i])
{
for(k=j; k < n;k++)
{
a[k] = a[k+1];
}
n--;
}
else {
j++;
}
}
}
for(i=0; i < n; i++)
{
printf("%d ", a[i]);
}
getch();
}
输出
输入数组大小:5
输入5数组元素:11 13 11 12 13
原始阵列是:11 13 11 12 13
新阵列是:11 13 12
答案 1 :(得分:0)
可能的解决方案:
O(n^2)
算法,您可以在其中执行线性搜索O(n)
,以检查数组中是否存在所有n
元素的数字。对于每个元素(n个元素):
O(n)
:搜索
O(1)
:插入
O(n^2)
算法,当您在有序数组中插入时。对于每个元素(n个元素):
O(log n)
:二进制搜索
O(n)
:转换和插入
虽然有高级数据结构(在C ++ STL中有更多),但您需要的不仅仅是数组。因为插入成本很高(插入特定位置)。
其他可能有用的数据结构:BST(AVL-BST,Splay Trees,......其他平衡树结构)。
在C ++中:集合正是你想要的。集合在STL中实现为树。