JSFiddle - React, Tailwind, and code Playground

HTML

<div id="array"></div>
<div id="length"></div>
<div id="path"></div>

JavaScript

var a = [3,5,2,6]; // 7
// var a = [4,3,4,3,4,3,4]; // 7

var MAX = 50;
var n = a.length - 1;
if (n > MAX) throw new Error("Too many items - at most " + (MAX+1) + " can be given but " + (n+1) + " are present.");

// iterate over all '+' and '-' sequences and find best folding (path)
var minLength = (n > 0 ? 2 * a.reduce((max, it) => Math.max(max, it), 0) : a[0] || 0); // 2*max(a)
var minPath;
for (var i=0, upto=1<<n; i<upto; ++i) { // each of "n" lowest bits of "i" represents '+' or '-'
  var bounds={left:0, right: a[0]}, pos=a[0], j=i;
  for (var k=1; k<=n; ++k, j>>=1) {
    pos += (j&1) ? -a[k] : a[k];
    bounds = { left: Math.min(bounds.left, pos), right: Math.max(bounds.right, pos) };
    if (bounds.right - bounds.left >= minLength) break; // optimization
  }
  var curLength = bounds.right - bounds.left;
  if (curLength < minLength) {
    minLength = curLength;
    minPath = i;
  }
}

// construct user-friendly display of the best folding
var cpath = minPath, pathStr = "" + (n >= 0 ? a[0] : "");
for (var i=1; i<=n; ++i, cpath>>=1) {
  pathStr += (cpath&1) ? " - " : " + ";
  pathStr += a[i];
}

document.getElementById("array").textContent = "Links: " + JSON.stringify(a, null, " ");
document.getElementById("length").textContent = "Minimal length: " + minLength;
document.getElementById("path").textContent = "Folding: " + pathStr;