http://coderchen.blogspot.com/2015/11/max-value-using-and.html
给一个数组[1,1,2,1],然后用+ * ()三个操作求出这个数组的最大值,这个题返回6。 很简单,DP解决。我开始写了个用res[i][j] 表示的solution,然后写完代码,测了几个用例,都过了。然后他问如果数组里面有负数和0咋办呢。 我说维护两个表max[i][j] 和 min[i][j]。然后他很满意。我说其实还有复杂度更低的方法,可以用一位数组做。他说不用了,这个方法已经够好了,不要求写那么复杂
给一个数组[1,1,2,1],然后用+ * ()三个操作求出这个数组的最大值,这个题返回6。 很简单,DP解决。我开始写了个用res[i][j] 表示的solution,然后写完代码,测了几个用例,都过了。然后他问如果数组里面有负数和0咋办呢。 我说维护两个表max[i][j] 和 min[i][j]。然后他很满意。我说其实还有复杂度更低的方法,可以用一位数组做。他说不用了,这个方法已经够好了,不要求写那么复杂
public int getMax(int[] nums) {
int n = nums.length;
int maxResult[][] = new int[n][n];
for (int len = 1; len <= n; len++) {
for (int start = 0; start < n; start++) {
int end = start + len - 1;
if (end >= n) {
continue;
}
if (start == end) {
maxResult[start][end] = nums[start];
continue;
}
for (int mid = start; mid < end; mid++) {
maxResult[start][end] = Math.max(maxResult[start][end],
Math.max(maxResult[start][mid] + maxResult[mid + 1][end],
maxResult[start][mid] * maxResult[mid + 1][end]));
}
}
}
return maxResult[0][n - 1];
}