2017-07-06 17 views
-9

私は配列に数字を挿入するロジックを必要とし、同時に現在の数字が既に配列に存在しないことをチェックします。論理で私を助けてください。C配列の要素の重複を避けるには?

+1

あなたの努力を示してください。 – rsp

+2

これまでに何を試しましたか?あなたの試みはどのように働いたのですか? [ヘルプページ](http://stackoverflow.com/help)、特に[ここではどのトピックを聞くことができますか?](http://stackoverflow.com/help/)のセクションを読んでください。 on-topic)と[[どのような種類の質問を避けるべきですか?]](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(); 
    } 

出力

アレイのサイズを入力してください11 13 11 12 13

元の配列である:5

5配列要素を入力:11 13 11 12 13

新しい配列:11 13 12

0

解決策:あなたは数がすべてn要素の配列かどうかに存在しているかどうかを確認するために、線形検索O(n)を行う

  1. O(n^2)アルゴリズム。
  2. 各要素(n個の要素)について

O(n):検索

O(1):挿入

を使用すると、ソートされた配列に挿入
  • O(n^2)アルゴリズム、
      。各要素について

  • (n個の要素):

    O(log n):バイナリ検索

    O(n):Shiftキーと挿入

    (以上のC++のSTLで)高度なデータ構造がありますがしかし、あなたは意志単なる配列以上のものが必要です。挿入は配列にコストがかかるため(特定の位置に挿入)

    その他のデータ構造:BST(AVL-BST、Splay Trees、...その他のバランスツリー構造)。

    C++では:セットはあなたが望むものです。 setsはSTLのツリーとして実装されます。

    関連する問題