using System.Diagnostics;
public static class Answer
public static bool Exists( int[] ints, int k )
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;
var middle = lower + ( upper - lower ) / 2;
if ( ints[middle] == k ) return true;
if ( lower == upper ) return false;
upper = Math.Max( lower, middle - 1 );
lower = Math.Min( upper, middle + 1 );
public static bool Exists2(int[] ints, int k)
while(i < ints.Length && !hasValue)
public static void Main()
var numbers = Enumerable.Range( 1, count ).ToArray();
Console.WriteLine("Lets run the test");
result = Answer.Exists( numbers, count-1 );
result = Answer.Exists2( numbers, count-1 );
sw = Stopwatch.StartNew();
result = Answer.Exists( numbers, count-1 );
Console.WriteLine( string.Format( "{0} ({1} ticks elapsed)", result, sw.Elapsed.Ticks ) );
sw = Stopwatch.StartNew();
result = Answer.Exists2( numbers, count-1 );
Console.WriteLine( string.Format( "{0} ({1} ticks elapsed)", result, sw.Elapsed.Ticks ) );