static void Main(string[] args) { int[] arr = { 1, 3, 4, 2, 0, 5, 7, 3, 9 }; int[] A = { 10001, 100050, 54, 80000 }; int[] B = { -7, -4, 0, -3 }; Stopwatch st1 = new Stopwatch(); Stopwatch st2 = new Stopwatch(); Stopwatch st3 = new Stopwatch(); Stopwatch st4 = new Stopwatch(); st1.Start(); Console.WriteLine(Fun(arr)); st1.Stop(); Console.WriteLine(st1.ElapsedTicks); Console.WriteLine(Fun(A)); Console.WriteLine(Fun(B)); st2.Start(); Console.WriteLine(Solution(arr)); st2.Stop(); Console.WriteLine(st2.ElapsedTicks); Console.WriteLine(Solution(A)); Console.WriteLine(Solution(B)); st3.Start(); Console.WriteLine(Sol2(arr)); st3.Stop(); Console.WriteLine(st3.ElapsedTicks); Console.WriteLine(Sol2(A)); Console.WriteLine(Sol2(B)); st4.Start(); Console.WriteLine(Sol3(arr)); st4.Stop(); Console.WriteLine(st4.ElapsedTicks); Console.WriteLine(Sol3(A)); Console.WriteLine(Sol3(B)); } static int Solution(int[] arr) { Array.Sort(arr); int[] S = arr.Where(x => !arr.Contains(x + 1) && x >= 0).ToArray(); if (!arr.Contains(1)) return 1; return S.Min(); } static int Fun(int[] arr) { while (arr.Max() < 1 || arr.Min() > 1) return 1; Array.Sort(arr); return arr.First(x => x >= 0 && !arr.Contains(x + 1)) + 1; } static int Sol2(int[] arr) { int minimum = Int32.MaxValue; if (!arr.Contains(1)) return 1; List positives = new List(); foreach (int item in arr) { if (item > 0) positives.Add(item); } foreach (int item in positives) { if (!positives.Contains(item + 1) && item < minimum) minimum = item; } return minimum + 1; } static int Sol3(int[] A) { int minimum = Int32.MaxValue; if (!A.Contains(1)) return 1; foreach(int item in A) { if (item > 0 && !A.Contains(item + 1) && (item + 1) < minimum) minimum = item + 1; } return minimum; } } }