如何避免C数组中的重复元素输入?

时间:2017-07-06 05:30:18

标签: c arrays

我想要一些逻辑,它会在数组中插入数字,同时它会检查数组中是否已存在当前数字。请帮我解释逻辑。

2 个答案:

答案 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)

可能的解决方案:

  1. O(n^2)算法,您可以在其中执行线性搜索O(n),以检查数组中是否存在所有n元素的数字。
  2. 对于每个元素(n个元素):

    O(n):搜索

    O(1):插入

    1. O(n^2)算法,当您在有序数组中插入时。
    2. 对于每个元素(n个元素):

      O(log n):二进制搜索

      O(n):转换和插入

      虽然有高级数据结构(在C ++ STL中有更多),但您需要的不仅仅是数组。因为插入成本很高(插入特定位置)。

      其他可能有用的数据结构:BST(AVL-BST,Splay Trees,......其他平衡树结构)。

      在C ++中:集合正是你想要的。集合在STL中实现为树。