0

私はこの配列を持っているとしましょう

int [] array= new int[26];

位置 0 は 'a' 、位置 1'b' ... 位置 25 は 'z' であるため、26 の場所があるため、各位置に int 番号があるため、

if in position array[0]=5 it means i have 5 'a'
if in position array[1]=6 it means i have 6'b'
if in position array[0]=0 it means that i do not have the 'a' letter

私が望むのは、各ループで2つの最小周波数と2つの最小周波数の文字を見つけることです

for(int i=0;i<array.length;i++)
        if(array[i]==0)
        continue;       
        else{
            cmin1=(char)('a'+i);
            posi=i;                 
            min1=array[posi] ;
            break;
        }
            for(int j=posi+1;j<array.length;j++){
            if(array[j]==0)
                continue;   
            else if(array[j]<=min1){
                posj=posi;
                posi=j;
                cmin2=cmin1;
                cmin1=(char)(j+'a');    
                min2=min1;
                min1=array[j];
            }

私はこれを試しましたが、これは間違っています

4

6 に答える 6

2

Javaはオブジェクト指向なので...

名前が LetterFrequency となるクラスを考えてみましょう。 LetterFrequency には 2 つの属性があります。1) Char 文字 2) 整数オカレンス

「発生」属性で LetterFrequency オブジェクトをソートする必要があります。これを行うには、LetterFrequancy に Comparable を実装させ、それに応じてメソッド compareTo() を定義します。

次に、すべての LetterFrequency オブジェクトを List に入れ、メソッドを使用します

Lists.sort(yourList)
于 2013-03-19T16:44:10.813 に答える
0

各頻度カウントを表すクラスを作成します。次にComparator、頻度でレコードを並べ替えるを作成します。次に、Arrays.sort()またはCollections.sort()を使用してコレクションを並べ替えますComparator

または、配列内のエントリを検索したいがデータ型を変更できない場合は、配列を検索する並べ替えない)ためのアルゴリズムを定義する必要があります。これを実行し、1回のパスで実行するには、発生頻度が最も低い2つの位置と対応する頻度のローカル変数を定義します。最小のものを配列の最初の項目に初期化し、次に現在の項目を比較して続行し、それより少ない場合は、追跡している変数の値をローテーションします。最後に、2つの頻度が最も低くなります。

于 2013-03-19T16:47:09.120 に答える
0

並べ替えは機能しますが、最高のパフォーマンスを発揮する方法ではありません。

O(n)になる単一のループはどうですか?

int min1 = Integer.MAX_INT;
int idx1 = -1;
int min2 = Integer.MAX_INT;
int idx2 = -1;

for(int i=0;i<array.length;i++) {
    // skip empty items
    if(array[i]==0)
         continue;

    if (array[i] < min1) {
         min2 = min1;
         idx2 = idx1;
         min1 = array[i];
         idx1 = i;
    }
    else if (array[i] < min2) {
         min2 = array[i];
         idx2 = i;
    }
}
于 2013-03-19T16:55:55.830 に答える
0

配列内の最小要素だけを見つけたい場合は、次のコードを使用できます。

List<int> list = Arrays.asList(ArrayUtils.toObject(array));

// Print the smallest element of your array
System.out.println(Collections.min(list)); 
于 2013-03-19T16:44:35.290 に答える
0

まず、この配列宣言は機能しません。

 int [] array= new array[26];

必要なもの:

 int [] array= new int[26];
于 2013-03-19T16:53:21.237 に答える
0

最初に配列を並べ替えます...次に検索アルゴリズムを適用します...そして、配列がすでに並べ替えられているため、2番目に小さい要素を取得できる最小の要素を見つけたら、ここに行きます...これを行うのに問題はないと思います。 ..ソートには、複雑さのあるクイックソート(nlogn)を使用できます...お役に立てば幸いです

于 2013-03-19T16:43:29.287 に答える