Skip to content

Instantly share code, notes, and snippets.

@Haraguroicha
Created July 4, 2014 08:00
Show Gist options
  • Save Haraguroicha/9293ed21a859ab1ddba4 to your computer and use it in GitHub Desktop.
Save Haraguroicha/9293ed21a859ab1ddba4 to your computer and use it in GitHub Desktop.
// Haraguroicha Hsu
// 2014-07-04
function findNearlyMaximum(arrayValue) {
var queueNegitive = function(q) {
var neg = false;
for(var i = 0; i < q.length; i++)
if(q[i] < 0) neg = !neg;
return neg;
}
var findNegitiveEdge = function(q) {
var firstNeg = 0;
var lastNeg = 0;
for(var i = 0; i < q.length; i++) {
var v = q[i];
if(v < 0) {
lastNeg = i;
if(firstNeg == 0) firstNeg = i;
}
}
return {first: firstNeg, last: lastNeg};
}
var queue = [];
var result = [];
var splitQueue = function() {
var temp = [];
for(var i = 0, v = arrayValue[i]; i < arrayValue.length; i++, v = arrayValue[i]) {
if(v == 0 && temp.length > 0) {
queue.push([].concat(temp));
temp = [];
} else {
temp.push(v);
}
}
if(temp.length > 0) queue.push([].concat(temp));
}
var splitMinimumNegitives = function() {
var oq = [].concat(queue);
var rq = [];
for(var i = 0, q = oq[i]; i < oq.length; i++, q = oq[i]) {
if(queueNegitive(q)) {
var edge = findNegitiveEdge(q);
var first = [].concat(q.slice(edge.first + 1));
var last = [].concat(q.slice(0, edge.last));
if(first.length > 0)
rq.push(first);
if(last.length > 0)
rq.push(last);
} else {
rq.push([].concat(q));
}
}
queue = [].concat(rq);
}
var calculateQueue = function() {
for(var i = 0, q = queue[i]; i < queue.length; i++, q = queue[i]) {
var math = '';
var val = 1;
for(var j = 0, v = q[j]; j < q.length; j++, v = q[j]) {
val *= v;
math += (math.length > 0 ? ' * ' : '') + v.toString();
}
result.push({ math: math, result: val });
}
}
var findMax = function() {
var max = { result: 0 };
for(var i = 0, r = result[i]; i < result.length; i++, r = result[i])
if(r.result > max.result)
max = r;
return max;
}
splitQueue();
splitMinimumNegitives();
calculateQueue();
this.value = findMax();
}
var result1 = new findNearlyMaximum([2 , -7 , 0 , 2 , 3 , 8 , -6 , 5]);
var result2 = new findNearlyMaximum([-2 , 0 , 3 , 5 , -7]);
console.log(result1.value, result2.value);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment