Last active
October 19, 2020 07:39
-
-
Save Jalalx/7655ca7281769538b76f32b6b6078742 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
mkdir OrderedNumbers | |
cd ./OrderedNumbers | |
dotnet new xunit | |
*/ | |
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using Xunit; | |
namespace OrderedNumbers | |
{ | |
public class OrderedNumbersTests | |
{ | |
public static int GetOrderedNumbersCount(int[] numbers, int n) | |
{ | |
if (n == 0 || n == 1) | |
{ | |
return n; | |
} | |
var lefts = new List<int>(); | |
var leftMax = numbers[0]; | |
lefts.Add(numbers[0]); | |
for (int i = 1; i < n; i++) | |
{ | |
if (numbers[i] > leftMax) | |
{ | |
lefts.Add(numbers[i]); | |
leftMax = numbers[i]; | |
} | |
} | |
var rights = new List<int>(); | |
var rightMin = numbers[n - 1]; | |
rights.Add(numbers[n - 1]); | |
for (int i = n - 2; i >= 0; i--) | |
{ | |
if (numbers[i] < rightMin) | |
{ | |
rights.Add(numbers[i]); | |
rightMin = numbers[i]; | |
} | |
} | |
var count = 0; | |
var hashSetLefts = new HashSet<int>(lefts); | |
foreach (var right in rights) | |
{ | |
if (hashSetLefts.Contains(right)) | |
{ | |
count++; | |
} | |
} | |
//var count = rights.Intersect(lefts).Count(); | |
return count; | |
} | |
[Fact] | |
public static void ForBasic_Pass() | |
{ | |
// Arrange | |
var numbers = new int[] { 1, 2, 3 }; | |
// Act | |
var actual = GetOrderedNumbersCount(numbers, numbers.Length); | |
// Assert | |
Assert.Equal(3, actual); | |
} | |
[Fact] | |
public static void ForSingle_Pass() | |
{ | |
// Arrange | |
var numbers = new int[] { 1 }; | |
// Act | |
var actual = GetOrderedNumbersCount(numbers, numbers.Length); | |
// Assert | |
Assert.Equal(1, actual); | |
} | |
[Fact] | |
public static void ForEmpty_Pass() | |
{ | |
// Arrange | |
var numbers = new int[] { }; | |
// Act | |
var actual = GetOrderedNumbersCount(numbers, numbers.Length); | |
// Assert | |
Assert.Equal(0, actual); | |
} | |
[Fact] | |
public static void ForReverseArray_Pass() | |
{ | |
// Arrange | |
var numbers = new int[] { 5, 4, 3, 2, 1 }; | |
// Act | |
var actual = GetOrderedNumbersCount(numbers, numbers.Length); | |
// Assert | |
Assert.Equal(0, actual); | |
} | |
[Fact] | |
public static void ForUnOrderedArray_Pass() | |
{ | |
// Arrange | |
var numbers = new int[] { 54, 45, 37, 22, 10, 69, 95, 82, 71 }; | |
// Act | |
var actual = GetOrderedNumbersCount(numbers, numbers.Length); | |
// Assert | |
Assert.Equal(1, actual); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment