2017-07-06 78 views
-9

我要一些邏輯將所述陣列中插入數字,並在同一時間它會檢查當前的號碼已不存在在數組中。請幫助我的邏輯。如何避免C數組中的重複元素項?

+1

顯示你的努力。 – rsp

+2

你到目前爲止嘗試過什麼?你的嘗試如何工作,或沒有工作?請花些時間閱讀[幫助頁面](http://stackoverflow.com/help),尤其是名爲[「我可以問些什麼話題?」]的章節(http://stackoverflow.com/help/)討論話題)和[「我應該避免問什麼類型的問題?」](http://stackoverflow.com/help/dont-ask)。另外[閱讀關於如何提出好問題](http://stackoverflow.com/help/how-to-ask)。最後,請學習如何創建[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 –

+0

http://www.studytonight.com/c/remove-duplicate-element-program.php – rsp

回答

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

0

可能的解決方案:

  1. 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,伸展樹......等平衡樹結構)。

    在C++:套正是你想要的。集合在STL中作爲樹實現。