2016-04-25 6 views
0

私は整数配列を持っています。私は、任意のトリプレットが与えられた配列整数配列の三つ組を見つける方法

int[] arr = [1,2,2,3,2,4]; 

public int FindTriplet(int[] arrayrecieve) 
{ 
// TO return 1 ; // if the array has a triplet (foe example above array has 2,2,2) 

}他

リターン0に存在するかどうかを検索します。

}

+0

3つのネストされたループ..? – Shaharyar

+0

何か試しましたか? – hatchet

答えて

4

あなたはLINQののGroupBy()を使用し、少なくとも3のカウントはすべてのグループを見つけることができる:

  1. GroupBy(x => x)

    は、すべての要素を細分化し、次のようにこの作品

    int[] arr = {1, 2, 2, 3, 2, 4, 1, 4, 6, 5, 4, 9}; 
    var triplets = arr.GroupBy(x => x).Where(y => y.Count() >= 3).Select(z => z.First()); 
    Console.WriteLine(string.Join(", ", triplets)); // Prints 2, 4 
    

    配列を同じ数のグループにグループ化します(つまり、1つはすべて1つのグループに、2つはすべて別のグループに移動します)。

  2. Where(y => y.Count() >= 3)は、カウント(すなわち項目の数)が少なくとも3であるもののみが含まれるようにグループをフィルタリングする。
  3. Select(z => z.First())これらのフィルタリングされたグループをそれぞれ取り、それぞれの最初の要素のみを選択します(グループ内の各要素はもちろん同じです)。あなたもそうようtripletsの上記初期化を書き込むことができます

注:少なくとも1つのトリプレットがある場合は1を返したいというあなたの特定の要件については

var triplets = 
    from number in arr 
    group number by number into grouped 
    where grouped.Count() >= 3 
    select grouped.First(); 

、あなたはこれを行うだろう。

int result = triplets.Any() ? 1 : 0; 

(私は思っているだろうが、あなたはint型ではなく、ブール値を返すようにしたいと思います)

また、正確に3のカウントを持つグループを検索する場合は、Where().Where(y => y.Count() == 3)

1

に変更するだけです。 intを要求する理由。

using System.Linq; 
using System.Collections.Generic; 
public bool hasTriplet(int[] values) 
{ 
    foreach (int i in values) 
    { 
     if (values.Where(v => v == i).ToList().Count >= 3) 
     { 
      return true; 
     } 
    } 
    return false; 
} 
0
int[] arr = {1,2,2,3,5,4}; 
Array.Sort(arr); 
for (int i = 2; i < arr.Length; i++) if (arr[i-2] == arr[i]) return = 1; 
return 0; 
関連する問題