Skip to content

Instantly share code, notes, and snippets.

@ilatif
Created October 8, 2019 21:48
Show Gist options
  • Select an option

  • Save ilatif/e80fe617d6d1d35c18d585b83a6989a7 to your computer and use it in GitHub Desktop.

Select an option

Save ilatif/e80fe617d6d1d35c18d585b83a6989a7 to your computer and use it in GitHub Desktop.

Revisions

  1. ilatif created this gist Oct 8, 2019.
    54 changes: 54 additions & 0 deletions algoexpert-largest-range.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,54 @@
    function largestRange(array) {
    if (array.length === 1) {
    return [array[0], array[0]];
    }

    var hash = {};
    hash[array[0]] = [];
    var current = array[0];
    for (var i = 1; i < array.length; i++) {
    var temp = array[i];
    if (!hash[temp]) {
    hash[temp] = [];
    }

    if (hash[temp - 1]) {
    hash[temp].push(temp - 1);
    }

    if (hash[temp + 1]) {
    hash[temp].push(temp + 1);
    }

    if (hash[temp - 1]) {
    hash[temp - 1].push(temp);
    }

    if (hash[temp + 1]) {
    hash[temp + 1].unshift(temp);
    }
    }

    var keys = Object.keys(hash), max = [];
    for (var i = 0; i < keys.length; i++) {
    var key = keys[i];
    var arr = hash[key];
    if (arr.length === 1 && arr[0] > key) {
    var a = hash[arr[0]], temp = [parseInt(key), arr[0]];
    for (var j = 1; j < keys.length; j++) {
    if (!a || !a.length || a.length === 1) {
    break;
    }
    if (a[a.length - 1]) {
    temp.push(a[a.length - 1]);
    }
    a = hash[a[a.length - 1]];
    }
    if (temp.length > max.length) {
    max = temp;
    }
    }
    }

    return [max[0], max[max.length - 1]];
    }