# All files / algorithms/lib/findOUtlier findOUtlier.ts

100% Statements 27/27
100% Branches 14/14
100% Functions 1/1
100% Lines 27/27

Press n or j to go to the next uncovered block, b, p or k for the previous block.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57

    1x
    5x
    5x
    5x
    5x
    5x

    5x

    12x
    8x
    5x
    8x
    3x
    3x
    8x

    12x
    6x
    6x
    6x
    6x

    12x
    5x
    5x

    7x
    7x
    7x

    5x
    1x

     // You are given an array(which will have a length of at least 3, but could be very large) containing integers.
    // The array is either entirely comprised of odd integers or entirely comprised of even integers except for a single integer
    // N.Write a method that takes the array as an argument and returns this "outlier" N.
    //
    //
    // [2, 4, 0, 100, 4, 11, 2602, 36] -->  11 (the only odd number)

    // [160, 3, 1719, 19, 11, 13, -21] --> 160 (the only even number)
    //
    //

    // export function findOUtlier(integers: number[]): number {

    //   const isEvenNum = integers.filter(num => num % 2 == 0);
    //   const isOddNum = integers.filter(num => num % 2 != 0);

    //   return isEvenNum.length == 1 ? Number(isEvenNum) : Number(isOddNum);
    // };

    export function findOUtlier(integers: number[]): number {
      const evenNum: number[] = [];
      const oddNum: number[] = [];
      const middle = Math.trunc(integers.length / 2);
      let end = integers.length - 1;
      let start = 0;

      while (start < middle || end >= middle) {

        if (start !== middle) {
          if (!(integers[start] % 2)) {
            evenNum.push(integers[start])
          } else {
            oddNum.push(integers[start])
          }
        }

        if (!(integers[end] % 2)) {
          evenNum.push(integers[end])
        } else {
          oddNum.push(integers[end])
        }

        if (evenNum.length === 1 && oddNum.length > 1 || oddNum.length === 1 && evenNum.length > 1) {
          break;
        }

        start++;
        end--;
      }

      return evenNum.length === 1 ? evenNum[0] : oddNum[0];
    };