重複の可能性:
Java配列、重複の検索
私はこの配列を持っています
int[][] array = {{1,2,3,4}, {5,6,2,8}, {9, 10, 11, 12}, {13, 14, 15, 16}};
この配列に重複する要素がある場合は、falseを返す必要があります。たとえば、インデックス[0][1]と[1][2]は等しいです。これを検出する方法が必要です。また、ソリューションでプリミティブ、配列、およびループのみを使用するとよいでしょう。
重複の可能性:
Java配列、重複の検索
私はこの配列を持っています
int[][] array = {{1,2,3,4}, {5,6,2,8}, {9, 10, 11, 12}, {13, 14, 15, 16}};
この配列に重複する要素がある場合は、falseを返す必要があります。たとえば、インデックス[0][1]と[1][2]は等しいです。これを検出する方法が必要です。また、ソリューションでプリミティブ、配列、およびループのみを使用するとよいでしょう。
1:すべての値をリストに追加します(例:ArrayList)
2:すべてをセットに追加します(例:TreeSet)
と比較list.size()
するset.size()
等しくない場合は、重複しているよりも
プリミティブのみを使用する場合は、次のように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を返します。
宿題の質問だと思うので、実際の実装はガイドラインだけではありません。
2D配列があるため、2つのforループのみが必要です。
配列内のすべての数値を反復処理し、それらが等しいかどうかを比較します。
重複が見つかった場合はfalseを返します。
別の方法
この2D配列を1D配列に変換します
すべての値を繰り返して比較します
以下のコードを試してください
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));
}
}
擬似コード:
HashSet
Set
各反復で、にその要素が含まれているかどうかを確認します。もしそうなら、return false
すぐに。return true;
。最大要素を知っている場合にのみ機能する別の方法があります
If
配列セルがゼロの場合、セルをインクリメントします(cell[element]++
)。If
配列セルは1ですreturn false;
。return true;
私の解決策: