2016-03-21 14 views
-1

私は現在、プロジェクトに取り組んでおり、C配列の中で2番目に出現頻度の低い要素を特定するために必要な部分の1つについて作業しています。 【】入力された配列であり、iはint型ARRC配列内の2番目に出現頻度の低い要素

int minRepeat(int arr[], int i){ 
    int j = 0; 
    int l = 0; 
    int minimum = 100; 
    int minNum = 0; 
    for(j = 0; j < i; j++){ 
     int m = 0; 
     for(l = 0; l < i; l++){ 
      if(arr[j] == arr[l]){ 
       m++; 
      } 
     } 
     if(m < minimum){ 
      minimum = m; 
      minNum = arr[j]; 
     } 
    } 
    return minNum; 
} 

:いずれの場合では、アレイ内の要素の最大数は、私が最も発生要素を見つけるために、既に書き込まれた機能を持っている100になるだろうその配列のサイズ

私は、C配列に2番目に出現している要素を見つける関数を作成しようとしています。現在のところ、関数は次のとおりです。

int secMin(int arr[], int i){ 
    int j = 0; 
    int l = 0; 
    int minimum = 0; 
    int minNum = 0; 

    int q = 0; 
    int k = minRepeat(arr, i); 
    for(q = 0; q < i; q++){ 
     if(arr[q] == k){ 
      minimum++; 
     } 
    }  

    int minimum2 = 100; 
    for(j = 0; j < i; j++){ 
     int m = 0; 
     for(l = 0; l < i; l++){ 
      if(arr[j] == arr[l]){ 
       m++; 
      } 
     } 
     if(m < minimum2){ 
      if(m > minimum){ 
       minimum2 = m; 
       minNum = arr[j]; 
      } 
     } 
    } 
    return minNum; 
} 

私は、最も少ない要素を見つけるために最初の関数を呼び出しています。その要素が配列内で何回出現したかを調べ、最初の関数と同じことをして最小のものを見つけますが、最後の最初の要素と比較してこの要素が2番目であることを確認します少なくとも発生する。

arr [] = {1,1,1,2,2,3,2,4,4,1} の場合、発生頻度は3、2番目の発生数は1になります。 場合によっては、関数は他の入力と連動し、時にはそうでない場合もあります。

ありがとうございました!

+0

ヒストグラムを作成してソートし、SortedHisto [1]を選択するだけです。完了しました。 – DevNull

+0

@Dogbertこれを実装しようとしていただきありがとうございます – user4072905

+0

いいですね。また、将来n番目に小さい/大きい値、または同様のメトリックを見つける必要がある場合は、余分な中間値を追加する必要はありません。 – DevNull

答えて

1

ちょうどあなたの最初の例でも、二以上の要素格納するために少し調整:

if(m < minimum){ 
    secondminimum = minimum; 
    secondminNum = minNum 
    minimum = m; 
    minNum = arr[j]; 

} 

編集:私はちょうど以上とseconleast要素が出現同じ数を持っていない場合にのみ動作することを実現しますが、あなたはその事件を捉えることができます。

+0

しかし、最小の要素と最小の要素の両方を返す必要がある場合は、別々の関数でそれらを必要としませんか? – user4072905

+0

あなたの関数の戻り値としてそれらを必要としますか?それ以外の場合は、関数のパラメータでsecondleastを返します – RomCoo

関連する問題