给你一个整数数组,返回它的某个 非空 子数组(连续元素)在执行一次可选的删除操作后,所能得到的最大元素总和。
换句话说,你可以从原数组中选出一个子数组,并可以决定要不要从中删除一个元素(只能删一次哦),(删除后)子数组中至少应当有一个元素,然后该子数组(剩下)的元素总和是所有子数组之中最大的。
注意,删除一个元素后,子数组 不能为空。
请看示例:
示例 1:
输入:arr = [1,-2,0,3]
输出:4
解释:我们可以选出 [1, -2, 0, 3],然后删掉 -2,这样得到 [1, 0, 3],和最大。
示例 2:
输入:arr = [1,-2,-2,3]
输出:3
解释:我们直接选出 [3],这就是最大和。
思路:$dp[$i][0] 表示以i结尾的最大值 $dp[$i][1] 表示以i结尾除去一个数据的最大值
<?phpclass Solution {/*** @param Integer[] $arr* @return Integer*/function maximumSum($arr) {$len = count($arr);if($len <= 0){return 0;}$dp[0][0] = $arr[0];$dp[0][1] = PHP_INT_MIN;$max1 = max($dp[0][1],$dp[0][0]);for($i = 0;$i < $len;++$i){$dp[$i][0] = max($dp[$i-1][0]+$arr[$i],$arr[$i]);$dp[$i][1] = max($dp[$i-1][0],($dp[$i-1][1] == PHP_INT_MIN ? 0 : $dp[$i-1][1]) + $arr[$i]);$max1 = max($max1,max($dp[$i][0], $dp[$i][1]));}return $max1;}}
```
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-subarray-sum-with-one-deletion
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
