2017-09-11 5 views
0

配列の要素がinの出現数に従ってソートされているかどうかをチェックしたいと思います。これは、要素が同じであれば既にグループ化されていることを前提としています。 int [] y = {7, 7, 7, 8, 8, 5, 5, 5, 5}falseを返し、int [] y = {5, 5, 5, 5, 7, 7, 7, 8, 8}trueを返す必要があります。 5人は4人、7人は7人、もう2人は8人ですので、そんなに手配してください。配列内の要素が発生数に従ってソートされているかどうかをチェックする方法は?

これは私がこれまで持っているものです。

import java.io.*; 
import java.util.*; 


public class testing2 { 

    public static void main(String[] args){ 
    int [] y = {7, 7, 7, 8, 8, 5, 5, 5, 5}; 
    System.out.println(isSorted(y)); // should return false 

    } 

    public static boolean isSorted(int[] y){ 

    HashMap<Integer,Integer> hash = new HashMap<Integer,Integer>(); 

    for(int i=0; i<y.length; i++){ 
     if(hash.containsKey(y[i])){ 
     hash.put(y[i], hash.get(y[i]) + 1); 
     } else { 
     hash.put(y[i], 1); 
     } 
    } 
    System.out.println(hash); 
    return true; // code is not complete yet 
    } 
} 

それを印刷します:

{5=4, 7=3, 8=2} 
true 

をだから今、私は各要素の出現回数を持っています。私は次に何をしますか?

+0

'isSorted'は常にtrueを返し、そして何だろう次はやりたいですか? – msagala25

+0

* *を確認するには、基本的に 'その注文されていません'と '注文されました'と言いたいのですか?そのようなものであれば、数えている間にすべてのアイテムを繰り返すことができます。番号が変更された場合は、その番号が以前の番号よりも大きいか小さいかを確認してください。 –

+0

@ LKTN.25まだ。私は出現を持っているので、配列y [] = {7,7,7,8,8,5,5,5,5}が降順でソートされているかどうかを調べたい。出現回数は3,2,4ではありませんが、4,3,2 –

答えて

1

これは、配列の1回のパスで解決できます。

アレイを繰り返している間に、現在のnumber(例:5,7または8)とquantityを追跡します。 numberの次のグループが終了したら、前のnumber/quantityと比較してください。次に、trueまたはfalseを適切に返します。

1

あなたがHashMapを使用してのあなたの方向を維持することを好む場合は、継続するための一つの方法があります:

  • 使用LinkedHashMap代わりに、あなたはマップを通して繰り返すときに、あなたがでていること、あなたが置くために反復されていますmap
  • マップを繰り返して、各エントリがカウント< prevエントリを持っているかどうかを確認します。擬似コード:

    int prevCount = MAX_INT; 
    for (entry : map) { 
        currentCount = entry.getValue() 
        if (currentCount > prevCount) { 
         return false 
        } 
        prevCount = currentCount 
    } 
    return true; 
    

それとも、あなたは配列(擬似コード)上の1つのパスを持つことができます。

prevCount = MAX_INT 
currentCount = 0; 
for (i = 0...array.length) { 
    increment currentCount 

    // if i points to last number in group 
    if (i is the last element of array, OR 
      next element is not equals to current element) { 
     if currentCount > prevCount { 
      return false; 
     } 
     prevCount = currentCount; 
     currentCount = 0; 
    } 
} 
関連する問題