如何为较长的数字数组提高算法性能? [英] How do I increase the algorithm performance for longer array of numbers?

查看:82
本文介绍了如何为较长的数字数组提高算法性能?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

感谢您的光临。

计算有序数字数组中小于4的数字。

Count how many numbers are less than 4 in an ordered array of numbers.

如何做我可以为更长的数字数组提高算法性能?提高计算速度。二进制搜索有帮助吗?输出?

How do I increase the algorithm performance for longer array of numbers? Increase the calculation speed. Does binary search help? Outputs?

    public static int CountNumbers(int[] sortedArray, int lessThan)
    {
        int count = 0;

        for (int i = 0, len = sortedArray.Length; i < len; i++)
            if (sortedArray[i] < lessThan)
                count++;
            else return count;

        return count;
    }

Assert.AreEqual(SortedSearch.CountNumbers(new int[] { 1, 3, 5, 7 }, 4), 2);


推荐答案

您应使用 Array .BinarySearch

static int CountNumbers(int[] sortedArray, int lessThan)
{
    if (sortedArray[0] >= lessThan) return 0;

    int lengthOfArray = sortedArray.Length;
    if (lengthOfArray == 0) return 0;
    if (sortedArray[lengthOfArray - 1] < lessThan) return lengthOfArray;

    int index = Array.BinarySearch(sortedArray, lessThan);
    if (index < 0)
        return ~index;
    // Find first occurrence in case of duplicate
    for (; index > 0 && sortedArray[index - 1] == lessThan; index--) ;
    return index;
}

这篇关于如何为较长的数字数组提高算法性能?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆