如何加快循环百万值数组的过程?

DLP*_*DLP 5 c# arrays loops

因此,我进行了在线测试,其中我必须实现一段代码以简单地检查该值是否在数组中。我写了以下代码:

    using System;
    using System.IO;
    using System.Linq;

    public class Check
    {
        public static bool ExistsInArray(int[] ints, int val)
        {
            if (ints.Contains(val)) return true;
            else return false;
        }
    }
Run Code Online (Sandbox Code Playgroud)

现在我在这里没有看到任何问题,因为代码可以正常工作,但是由于数组包含一百万个值,这样做“不够快”,因此我仍然无法通过测试。

我自己编写的唯一代码是:

    if (ints.Contains(val)) return true;
    else return false;
Run Code Online (Sandbox Code Playgroud)

我得到的另一个代码可以使用。

有没有办法加快这个过程?

提前致谢。

编辑:我碰到了一个页面,其中有人显然接受了与我相同的测试,这似乎可以节省CPU周期。

参考:在排序列表中搜索值时如何节省CPU周期?

现在,他在方法中的解决方案是:

    var lower = 0;
    var upper = ints.Length - 1;

    if ( k < ints[lower] || k > ints[upper] ) return false;
    if ( k == ints[lower] ) return true;
    if ( k == ints[upper] ) return true;

    do
    {
        var middle = lower + ( upper - lower ) / 2;

        if ( ints[middle] == k ) return true;
        if ( lower == upper ) return false;

        if ( k < ints[middle] )
            upper = Math.Max( lower, middle - 1 );
        else
            lower = Math.Min( upper, middle + 1 );
    } while ( true );
Run Code Online (Sandbox Code Playgroud)

现在,我看到了这段代码是如何工作的,但是我不清楚为什么这应该更快。如果有人可以详细说明会很好。

Mih*_*ave 8

如果是排序数组,则可以使用BinarySearch来加快过程

public static bool ExistsInArray(int[] ints, int val)
{
    return Array.BinarySearch(ints, val) >= 0;
}
Run Code Online (Sandbox Code Playgroud)