@Test public void testOneStepMaxAt0() { int[] numbers = new int[]{41, -31, -59, -26, -13}; assertEquals(41, ms.maxSub(numbers)); }
public int maxSub(int[] data) { int maxend = data[0]; int maxfar = data[0]; for (int i = 1; i < data.length; i++) { maxend = Math.max(data[i], maxend + data[i]); maxfar = Math.max(maxfar, maxend); } return maxfar > 0 ? maxfar : 0; }
MaxSubProblem { public int maxSub(int[] data) { int maxend = data[0]; int maxfar = data[0]; for (int i = 1; i < data.length; i++) { maxend = Math.max(data[i], maxend + data[i]); maxfar = Math.max(maxfar, maxend); } return maxfar > 0 ? maxfar : 0; } }
MaxSubProblem { public int maxSub(int[] data) { int maxend = data[0]; int maxfar = data[0]; for (int i = 1; i < data.length; i++) { maxend = Math.max(data[i], maxend + data[i]); maxfar = Math.max(maxfar, maxend); } return maxfar > 0 ? maxfar : 0; }  }
MaxSubProblem { public int maxSub(int[] data) { int maxend = data[0]; int maxfar = data[0]; for (int i = 1; i < data.length; i++) { maxend = Math.max(data[i], maxend + data[i]); maxfar = Math.max(maxfar, maxend); } return maxfar > 0 ? maxfar : 0; }  int maxSub1(int[] data); int maxSub2(int[] data); int maxSub(int[] data); }
MaxSubProblem { public int maxSub(int[] data) { int maxend = data[0]; int maxfar = data[0]; for (int i = 1; i < data.length; i++) { maxend = Math.max(data[i], maxend + data[i]); maxfar = Math.max(maxfar, maxend); } return maxfar > 0 ? maxfar : 0; }  int maxSub1(int[] data); int maxSub2(int[] data); int maxSub(int[] data);  }