首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >阵列中最大值的发现

阵列中最大值的发现
EN

Stack Overflow用户
提问于 2018-10-18 01:22:17
回答 5查看 2.2K关注 0票数 2

我试图在Integer中找到最大值的出现情况。

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int[] ar = [3, 1, 2, 3];

在这里,最大的3被重复两次,所以预期的输出是2

这是可行的,我将被计数为2,因为最大值3在数组中发生了两次。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var max = int.MinValue;
var occurrenceCount = 0;

foreach(var x in ar)
{
    if (x >= max) max = x;
}

foreach(var x in ar)
{
    if (x == max) occurrenceCount++;
}

产出:2//事件计数

有了Linq就更简单了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var occurrenceCount = ar.Count(x => x == ar.Max())

产出:2//事件计数

如果没有Linq,是否有任何简化或有效的方法来做到这一点?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-10-18 01:36:54

至少,您可以合并第一个数组。我仍然会使用Linq解决方案。更清楚了。如果您真的想讨论性能,请先阅读哪个更快?

下面是一个O(n)的解决方案:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int[] ar = {3, 1, 2, 3, 3, 4, 4};
int max = ar[0];
var occurrenceCount = 1;

for(var i = 1; i < ar.Length; i++)
{
    if (ar[i] > max) {
	max = ar[i];
	occurrenceCount = 1;
    }
    else if (ar[i] == max) {
        occurrenceCount++;
    }
}

WriteLine(max);
WriteLine(occurrenceCount);

在网上试试!

  • 注意,您应该处理数组为空的情况。
票数 4
EN

Stack Overflow用户

发布于 2018-10-18 01:37:59

我没有用林克。我用兰达:)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 int[] ar = new[] { 3, 1, 2, 3 };


        var result = ar.GroupBy(x => x) //values groups
        .Select(x => new
        {
            Number = x.Key,
            Count = x.Count()
        }).OrderByDescending(x => x.Count) //Short
        .FirstOrDefault(); //First Result


 result.Count // how many 

 result.Key   // max number

没有Linq和没有Lamda

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 int[] ar = new[] { 3, 1, 2, 3 };
            Array.Sort(ar);
            Array.Reverse(ar);
            var maxValue = ar[0];
            var occurrenceCount = 0;
            foreach (var item in ar)
            {
                if (item == maxValue)
                    occurrenceCount++;
            }
票数 1
EN

Stack Overflow用户

发布于 2018-10-18 01:44:06

基于可枚举的Max的实现和GetCount,您可以简单地通过在Max的前端添加一个测试来分解:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static int CountMax(this IEnumerable<int> source)
{
    if (source == null)
    {
        throw new ArgumentException();
    }

    int value = 0;
    bool hasValue = false;
    int count = 0;

    foreach (int x in source)
    {
        if (hasValue)
        {
            if (x > value)
            {
                value = x;
                count = 1;
            }
            else if (x == value)
            {
                count++;
            }
        }
        else
        {
            value = x;
            count = 1;
            hasValue = true;
        }
    }
    if (hasValue)
    {
        return count;
    }

    throw new Exception("no elements");
}

最酷的一点是,它很容易使它更通用,比如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static int CountMax<TSource>(this IEnumerable<TSource> source) where TSource : IComparable
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52870901

复制
相关文章

相似问题

Mongo ODM在阵列中的发现

11

阵列PHP中类似的发现

21

矩阵列中的最大值

26

阵列组合中的最小最大值

14

C++阵列中的最大值

31
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文