当前位置:网站首页>LeetCode 1186. Delete once to get the sub array maximum and daily question

LeetCode 1186. Delete once to get the sub array maximum and daily question

2022-07-07 16:59:00 @Little safflower

Problem description

Give you an array of integers , Return one of its   Non empty Subarray ( Continuous element ) After performing an optional delete operation , The maximum sum of elements that can be obtained . let me put it another way , You can choose a sub array from the original array , And you can decide whether to delete an element from it ( It can only be deleted once ),( After deleting ) There should be at least one element in the subarray , Then the subarray ( be left over ) The sum of the elements of is the largest of all subarrays .

Be careful , After deleting an element , Subarray Can't be empty .

Example 1:

Input :arr = [1,-2,0,3]
Output :4
explain : We can choose [1, -2, 0, 3], And then delete -2, In this way, I get [1, 0, 3], And the biggest .
Example 2:

Input :arr = [1,-2,-2,3]
Output :3
explain : Let's just pick [3], This is the maximum sum .
Example 3:

Input :arr = [-1,-1,-1,-1]
Output :-1
explain : The resulting subarray cannot be empty , So we can't choose [-1] And delete -1 To get 0.
      We should choose directly [-1], Or choose [-1, -1] Then delete one from it -1.
 

Tips :

1 <= arr.length <= 105
-104 <= arr[i] <= 104

source : Power button (LeetCode)
link :https://leetcode.cn/problems/maximum-subarray-sum-with-one-deletion
Copyright belongs to the network . For commercial reprint, please contact the official authority , Non-commercial reprint please indicate the source .

Java

class Solution {
    public int maximumSum(int[] arr) {
        int len = arr.length;
        int remain = arr[0];
        int delete = 0;
        int ans = remain;

        for(int i = 1;i < len;i++){
            int n = arr[i];
            if(n >= 0){
                remain = Math.max(0,remain) + n;
                delete = delete + n;
            }else {
                // Delete this time , Or delete the previous element 
                delete = Math.max(remain,delete + n);
                remain = Math.max(0,remain) + n;
            }
            ans = Math.max(ans,remain);
            ans = Math.max(ans,delete);
        }
        return ans;
    }
}

原网站

版权声明
本文为[@Little safflower]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/188/202207071512070856.html