0

重複の可能性:
Java配列、重複の検索

私はこの配列を持っています

int[][] array = {{1,2,3,4}, {5,6,2,8}, {9, 10, 11, 12}, {13, 14, 15, 16}};

この配列に重複する要素がある場合は、falseを返す必要があります。たとえば、インデックス[0][1]と[1][2]は等しいです。これを検出する方法が必要です。また、ソリューションでプリミティブ、配列、およびループのみを使用するとよいでしょう。

4

6 に答える 6

5

1:すべての値をリストに追加します(例:ArrayList)
2:すべてをセットに追加します(例:TreeSet)

と比較list.size()するset.size()

等しくない場合は、重複しているよりも

于 2012-12-13T20:31:15.347 に答える
4

プリミティブのみを使用する場合は、次のようにTIntHashSetを使用できます。

TIntHashSet set = new TintHashSet(); // like Set<Integer> but with primitives
for(int[] arr: array) for(int i: arr) if(!set.add(i)) return false;
return true;

set.addメソッドは、値が重複しているために値を追加できなかった場合、falseを返します。

于 2012-12-13T20:42:21.003 に答える
1

宿題の質問だと思うので、実際の実装はガイドラインだけではありません。

  1. 2D配列があるため、2つのforループのみが必要です。

  2. 配列内のすべての数値を反復処理し、それらが等しいかどうかを比較します。

  3. 重複が見つかった場合はfalseを返します。

別の方法

  1. この2D配列を1D配列に変換します

  2. すべての値を繰り返して比較します

于 2012-12-13T20:34:31.593 に答える
1

以下のコードを試してください

package com.rais.duplicates;

import java.util.HashSet;
import java.util.Set;

/**
 * @author Rais.Alam
 * @date Dec 14, 2012
 */
public class DetectDuplicateClient
{

    public static boolean isDuplicate(int[][] array)
    {
        boolean retVal = false;
        if (array != null && array.length > 0)
        {
            Set<Integer> temp = new HashSet<Integer>();

            outer:
            for (int[] innerArray : array)
            {
                for (int value : innerArray)
                {
                    if(!temp.add(value))
                    {
                        retVal = true;
                        break outer;
                    }

                }
            }
        }
        return retVal;
    }

    public static void main(String[] args)
    {

        int[][] array =  { { 1, 2, 3, 4 }, { 5, 6, 2, 8 }, { 9, 10, 11, 12 },{ 13, 14, 15, 16 } };

        System.out.println(isDuplicate(array));
    }

}
于 2012-12-14T06:38:44.203 に答える
0

擬似コード:

  1. すべての値をループして、それらをに追加しますHashSet
  2. Set各反復で、にその要素が含まれているかどうかを確認します。もしそうなら、return falseすぐに。
  3. return true;

最大要素を知っている場合にのみ機能する別の方法があります

  1. 新しい配列を作成します。配列内の各セルは要素によってインデックスが付けられます
  2. If配列セルがゼロの場合、セルをインクリメントします(cell[element]++)。
  3. If配列セルは1ですreturn false;
  4. return true;
于 2012-12-13T20:42:09.717 に答える
0

私の解決策:

  1. リストへの2D配列要素
  2. リストを並べ替える
  3. リストアイテムにインデックスを付けた場合は、1つのforループをチェックインします== i + 1
于 2012-12-13T21:17:33.197 に答える