Summing up distinct elements in steps (follow up) This is a &quot;follow up&quot; to an answer I gave on this question : Summing up distinct elements in steps
Here are the OP's requirements :

&quot;My current task is to find a score from an array where the highest/lowest scores have been taken away, and if the highest/lowest occur more than once (ONLY if they occur more than once), one of them can be added:
E.g. int[] scores = [4, 8, 6, 4, 8, 5] therefore the final addition will be ∑4,8,6,5=23.
Another condition of the task is that LINQ cannot be used, as well as any of the System.Array methods (you can see by my previously ask questions that has been a bit of a pain for me, since I solved this with LINQ in less than 5 minutes).&quot;

public int CalculateScore(int[] scores)
{
   int lowestValue = int.MaxValue,
   highestValue = int.MinValue,
   ammountOfHighestValue = 1,
   ammountOfLowestValue = 1,
   finalScore = 0;

   foreach (int score in scores)
   {
      finalScore += score;

      if (score &lt; lowestValue)
      {
         lowestValue = score;
         ammountOfLowestValue = 1; //We need to reset the ammount
      }
      else if (score &gt; highestValue)
      {
         highestValue = score;
         ammountOfHighestValue = 1; //We need to reset the ammount
      }
      else if (score == lowestValue)
         ammountOfLowestValue++;
      else if (score == highestValue)
         ammountOfHighestValue++;
   }

   if (ammountOfHighestValue &gt; 1)
      //This way, we keep the highest score once.
      finalScore -= ((ammountOfHighestValue - 1) * highestValue); 
   else
      finalScore -= highestValue; //The value is there once, we remove it.

   if (ammountOfLowestValue &gt; 1)
      finalScore -= ((ammountOfLowestValue - 1) * lowestValue); //Same as highest
   else
      finalScore -= lowestValue;

   return finalScore;
}

I'm interested about how can I remove the multiple if/else statements  while keeping a complexity of O(n) and still loop through the array only once.
Bugs

Console.WriteLine(CalculateScore(new[] { 1 } ));
Console.WriteLine(CalculateScore(new[] { 2, 1 } ));
Console.WriteLine(CalculateScore(new[] { 3, 2, 1 } ));


What's the expected output? The question is maybe underspecified for the first case (I would say it's 0), but the other two are clear: 0 and 2.

But we get:

-2147483648
-2147483646
-2147483643


Bonus question: what is the correct result for the array { 1, 1 }? I would say 2, but your program returns 0.