Skip to content

Instantly share code, notes, and snippets.

@emothek
Created October 1, 2017 00:31
Show Gist options
  • Save emothek/675000e3792ae7ed7e4f8ed192e3018a to your computer and use it in GitHub Desktop.
Save emothek/675000e3792ae7ed7e4f8ed192e3018a to your computer and use it in GitHub Desktop.
highestProductOf3 = function (arrayOfInts) {
if(arrayOfInts.length < 3){ // if provided array has less than 3 values then return false
console.log('Less than 3 items!');
return false;
}
// we're going to start at the 3rd item (at index 2)
// so pre-populate highests and lowests based on the first 2 items.
// we could also start these as null and check below if they're set
// but this is arguably cleaner
var highest = Math.max(arrayOfInts[0], arrayOfInts[1]);
var lowest = Math.min(arrayOfInts[0], arrayOfInts[1]);
var highestProductOf2 = arrayOfInts[0] * arrayOfInts[1];
var lowestProductOf2 = arrayOfInts[0] * arrayOfInts[1];
// except this one--we pre-populate it for the first *3* items.
// this means in our first pass it'll check against itself, which is fine.
var highestProductOf3 = arrayOfInts[0] * arrayOfInts[1] * arrayOfInts[2];
// walk through items, starting at index 2
for (var i = 2; i < arrayOfInts.length; i++) {
var current = arrayOfInts[i];
// do we have a new highest product of 3?
// it's either the current highest,
// or the current times the highest product of two
// or the current times the lowest product of two
highestProductOf3 = Math.max(Math.max(highestProductOf3, current * highestProductOf2), current * lowestProductOf2);
// do we have a new highest product of two?
highestProductOf2 = Math.max(Math.max(highestProductOf2, current * highest), current * lowest);
// do we have a new lowest product of two?
lowestProductOf2 = Math.min(Math.min(lowestProductOf2, current * highest), current * lowest);
// do we have a new highest?
highest = Math.max(highest, current);
// do we have a new lowest?
lowest = Math.min(lowest, current);
}
;
return highestProductOf3;
};
var arr = [1,25,50]; // a test !
var res = highestProductOf3(arr);
console.log(res); // console log result !
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment