2

次のような整数配列があるとします:{5,3,5,4,2}

そして私は最も一般的な文字を返すメソッドを持っています

public int highestnumber(String[] num) {

        int current_number = Integer.parseInt(num[0]);
        int counter = 0;
        for (int i = 1; i < num.length; ++i) {
            if (current_number == Integer.parseInt(num[i])) {
                ++counter;

            } else if (counter == 0) {
                current_number = Integer.parseInt(num[i]);
                ++counter;

            } else {
                --counter;

            }
        }

        return current_number;
    }

しかし、複数の共通文字がある場合は、次のような配列がある場合のように、one(1)に最も近い番号を取得する必要があります。{5,5,4,4,2};

次に、メソッドは4を返す必要があります。これに対して何をすべきですか?

4

4 に答える 4

2

私があなたの質問を理解しているように、

あなたがしなければならないことは、

1. Create ArrayList from your int[]
2. Use HashMap for find duplicates, which one is unique
3. Sort it as Ascending order, 
4. First element is what you want..

編集:あなたの質問に答えてください

int[] arr = {5, 4, 5, 4, 2};
ArrayList<Integer> resultArray = new ArrayList<Integer>();
Set<Integer> set = new HashSet<Integer>();

for (int i = 0; i < arr.length; i++)
    {
     if (set.contains(arr[i]))
    {
     System.out.println("Duplicate value found at index: " + i);
     System.out.println("Duplicate value: " + arr[i]);
         resultArray.add(arr[i]);
    }
    else
    {
    set.add(arr[i]);
    }
   }
Collections.sort(resultArray);

for (int i = 0; i < resultArray.size(); i++)
{
Log.e("Duplicate Values:", resultArray.get(i) + "");
}

あなたの必要性は、

int values = resultArray.get(0);
于 2012-05-05T05:59:05.380 に答える
2

配列を並べ替えてから、値の実行をカウントします。

于 2012-05-05T06:02:28.507 に答える
1

速い方法。数値ごとに1つの要素のcounterint配列を作成します。配列を1回調べ、番号ごとに対応するカウンター配列をインクリメントします。最大数を最初のカウンター要素に設定してから、最大数よりも大きい場合にのみ最大数を現在の要素に変更し、最大数を返します。

public int highestNumber(String[] num){
    int[] count = new int[10];
    int highest_number = 0;
    int highest_value = 0;

    for(int i = 0; i < num.length; i++)
        count[Integer.parseInt(num[i])]++;;

    for(int i = 0; i < count.length; i++)
        if(count[i] > highest_value){
            highest_number = i;
            highest_value = count[i];
        }

    return highest_number;
}

10倍遅くなりますが、他のアレイはありません。数用に1つ、カウント用に2つのintを3つ作成します。intごとに1回配列を調べ、表示されるたびに現在のカウントをインクリメントします。その最大カウントよりも大きい場合は、最大カウントに設定し、最大数を現在のカウントに設定します。最大数を返します。

public int highestNumber(String[] num){
    int highest_number = 0;
    int highest_value = 0;
    int current_value = 0;

    for(int i = 0; i < 10; i++){
        for(int j = 0; j < num.length; j++)
            if(i == Integer.parseInt(num[j]))
                current_value++;

        if(current_value > highest_value){
            highest_value = current_value;
            highest_number = i;
        }

        current_value = 0;
    }

    return highest_number;
}

最初の配列は明らかにはるかに高速ですが、何らかの理由で別の配列が必要ない場合は、2番目の配列も機能します。

于 2012-05-05T07:03:36.633 に答える
1

これを試すこともできます:

import java.util.TreeMap;

public class SmallestFrequentNumberFinder {

    public static int[] stringToIntegerArray(String[] stringArray) {
        int[] integerArray = new int[stringArray.length];
        for (int i = 0; i < stringArray.length; i++) {
            integerArray[i] = Integer.parseInt(stringArray[i]);
        }
        return integerArray;
    }

    public static int getSmallestFrequentNumber(int[] numbers) {
        int max = -1;
        Integer smallestFrequentNumber = null;
        TreeMap<Integer, Integer> frequencyMaper = new TreeMap<Integer, Integer>();

        for (int number : numbers) {
            Integer frequency = frequencyMaper.get(number);
            frequencyMaper.put(number, (frequency == null) ? 1 : frequency + 1);
        }

        for (int number : frequencyMaper.keySet()) {
            Integer frequency = frequencyMaper.get(number);
            if (frequency != null && frequency > max) {
                max = frequency;
                smallestFrequentNumber = number;
            }
        }
        return smallestFrequentNumber;
    }

    public static void main(String args[]) {
        String[] numbersAsString = {"5", "5", "4", "2", "4", "4", "2", "2"};
        final int[] integerArray = stringToIntegerArray(numbersAsString);
        System.out.println(getSmallestFrequentNumber(integerArray));
    }
}
于 2012-05-05T12:27:44.967 に答える