Skip to content

Instantly share code, notes, and snippets.

@Jalalx
Last active October 19, 2020 07:39
Show Gist options
  • Save Jalalx/7655ca7281769538b76f32b6b6078742 to your computer and use it in GitHub Desktop.
Save Jalalx/7655ca7281769538b76f32b6b6078742 to your computer and use it in GitHub Desktop.
/*
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