【问题标题】:How to avoid duplicate element entry in C array? [duplicate]如何避免 C 数组中的重复元素条目? [复制]
【发布时间】:2017-12-09 23:05:49
【问题描述】:

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

【问题讨论】:

标签: c arrays


【解决方案1】:

删除数组中重复元素的代码

    #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

【讨论】:

    【解决方案2】:

    可能的解决方案:

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

    对于每个元素(n 个元素):

    O(n):搜索

    O(1):插入

    1. O(n^2) 算法,当您插入排序数组时。

    对于每个元素(n 个元素):

    O(log n):二分查找

    O(n): 移位和插入

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

    其他可能有帮助的数据结构:BST(AVL-BST、Splay Trees、...其他平衡的 Trees 结构)。

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

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 2014-04-13
      • 1970-01-01
      • 1970-01-01
      • 2012-08-24
      • 1970-01-01
      • 2014-06-17
      • 2017-06-23
      相关资源
      最近更新 更多