私は整数配列を持っています。私は、任意のトリプレットが与えられた配列整数配列の三つ組を見つける方法
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に存在するかどうかを検索します。
}
私は整数配列を持っています。私は、任意のトリプレットが与えられた配列整数配列の三つ組を見つける方法
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に存在するかどうかを検索します。
}
あなたはLINQののGroupBy()
を使用し、少なくとも3のカウントはすべてのグループを見つけることができる:
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つはすべて別のグループに移動します)。
Where(y => y.Count() >= 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)
に変更するだけです。 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;
}
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;
3つのネストされたループ..? – Shaharyar
何か試しましたか? – hatchet