配列内の要素のほとんどは、0、または同一の配列の値である場合、疎なアレイは、アレイを保持するために使用することができます。治療法のスパース配列は以下のとおりです。
1. いくつかの奇数行の合計のアレイを記録し、どのように多くの異なる値
1.2このように、プログラムIの大きさを減少させる、小規模のアレイに記録素子列の値と異なる値を有します
2.アイデアのスパース配列に2次元配列
2.1。元の2次元アレイのトラバーサル、有効データ数取得和
2.2。あなたがint sparseArrのまばらな配列を作成することができますよると合計合計+ 1を
2. スパースアレイへのデータの二次元アレイに前記有効データ
独創的なアイデアの二次元アレイ3.スパースアレイ
3.1。のような、元の2次元配列を作成するために、最初の行のデータによれば、疎な配列の最初の行を読み取るために上記INT = chessAr2 。11
3. スパースアレイの数行を読んだ後のデータ2.とは、元の2次元アレイに割り当てることができます。
4.アプリケーション例
パブリック クラスSparseArray { 公共 静的 ボイドメイン(文字列[]引数){ // 表す2次元配列を作成する黒2が表す青色0表すヌル INT chessarr1 [] [] = 新しい新しい INT [11] [11 ]。 chessarr1 [ 1] [2] = 1 。 chessarr1 [ 2] = 2 [3] ; // トラバーサルサイクルの二次元アレイ のSystem.out.println( "元の二次元アレイ" ) のために(INT []行:chessarr1){ ための(int型データ:行){ System.out.printf( "%d個の\ tの" 、データ); } System.out.println(); } // これにより多数の非ゼロ元の2次元アレイを反復 INT SUM = 0 ; のため(int型 I = 0;私は<11; I ++は){ ため(INT J = 0; J <11; J ++ ){ IF( chessarr1 [I]、[J]!= 0 ){ 合計 ++ ; } } } // 疎なアレイの対応作成 int型 sparsearr [] [] = 新しい新しい INT [SUM + 1] [3。]; // 疎なアレイコピーする sparsearr [0] [0] = 11 ; sparsearr [ 0] [1] = 11 。 sparsearr [ 0] [2] = SUM; //はsparsearrの中の非ゼロ値の2次元配列反復 のint COUNT = 0; // 最初のいくつかの非ゼロデータを記録する ための(INT I = 0;私は< 。11; I ++ ){ ため(INT J = 0; J <11; J ++ ){ IF!(chessarr1 [I] [J] = 0 ){ カウント ++ ; sparsearr [回数] [ 0] = I; sparsearr [回数] [ 1] = J; sparsearr [回数] [ 2] = chessarr1 [I] [J]。 } } } // 出力は、疎なアレイを形成 するSystem.out.printlnを(); System.out.printlnは( "アレイ希薄である" ;) のために(int型 I = 0;私は<sparsearr.length; I ++は){ System.out.printf( "%D \ T%D \ T%D \ T \ n"は、sparsearr [I] [0]、sparsearr [I] [1]、sparsearr [I] [2 ])。 } System.out.println(); // 二次元アレイに疎な配列 INT chessarr2 [] [] = 新しい新しい INT [sparsearr [0] [0] [sparsearr [0] [1 ]]; //は疎なアレイから2番目の行を横断 するために(INT I = 1; I <sparsearr.length; I ++ ){ chessarr2 [sparsearr [I] [ 0] [sparsearr [I] [1] = sparsearr [I] [2 ]。 } // 回復後の疎なアレイである ため(INT []行:chessarr2){ ための(int型データ:行){ System.out.printf( "%d個の\ tの" 、データ); } System.out.println(); } } }