我有一个整数数组。我想找出给定数组中是否存在任何三元组
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 :(得分:4)
您可以使用Linq的GroupBy()
并查找计数至少为3的所有群组:
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
其工作原理如下:
GroupBy(x => x)
将数组中的所有元素细分为相同数字的组(即,所有1和1都在一个组中,所有2&#39;在另一个组中,依此类推)。< / LI>
Where(y => y.Count() >= 3)
过滤群组,以便只包含至少为3的计数(即项目数)的群组。Select(z => z.First())
获取每个过滤后的组并仅选择每个过滤组的第一个元素(请注意,组中的每个元素当然都是相同的。)请注意,您也可以这样写triplets
的上述初始化:
var triplets =
from number in arr
group number by number into grouped
where grouped.Count() >= 3
select grouped.First();
如果您想要在至少有一个三元组时返回1的特定要求,您可以这样做:
int result = triplets.Any() ? 1 : 0;
(虽然我原本以为你想要返回一个bool而不是一个int)
此外,如果您想要找到计数为3的组,您只需将Where()
更改为:.Where(y => y.Count() == 3)
答案 1 :(得分:1)
如果您返回1或0,除非您有特殊原因要求使用int,否则您应该返回bool。
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;
}
答案 2 :(得分: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;