首页 > 其他分享 >力扣---1186. 删除一次得到子数组最大和

力扣---1186. 删除一次得到子数组最大和

时间:2023-06-27 22:02:28浏览次数:40  
标签:力扣 arr 1186 res --- int Math 数组 dp

给你一个整数数组,返回它的某个 非空 子数组(连续元素)在执行一次可选的删除操作后,所能得到的最大元素总和。换句话说,你可以从原数组中选出一个子数组,并可以决定要不要从中删除一个元素(只能删一次哦),(删除后)子数组中至少应当有一个元素,然后该子数组(剩下)的元素总和是所有子数组之中最大的。

注意,删除一个元素后,子数组 不能为空

 

示例 1:

输入:arr = [1,-2,0,3]
输出:4
解释:我们可以选出 [1, -2, 0, 3],然后删掉 -2,这样得到 [1, 0, 3],和最大。

示例 2:

输入:arr = [1,-2,-2,3]
输出:3
解释:我们直接选出 [3],这就是最大和。

示例 3:

输入:arr = [-1,-1,-1,-1]
输出:-1
解释:最后得到的子数组不能为空,所以我们不能选择 [-1] 并从中删去 -1 来得到 0。
     我们应该直接选择 [-1],或者选择 [-1, -1] 再从中删去一个 -1。

 

提示:

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

 

一开始用前缀和写,各种白给,看了题解才发现应该用动规,害,还是太菜。

可以发现:第 i 个位置,总共有两种情况:以 i 为结尾的子数组,前面没有进行删除,和进行了删除。

对没有进行删除的情况:第 i 个位置的最大值,为前一个位置的最大值和 0 向比较,然后加上第 i 个位置的数字。

对进行了删除的情况:第 i 个位置的最大值,为前一个位置未删除时的最大值,和前一个位置已删除并加上当前位置的情况。

class Solution {
    public int maximumSum(int[] arr) {
        int res = arr[0];
        int len = arr.length;
        int [][] dp = new int[len][2];
        dp[0][0] = arr[0];
        dp[0][1] = 0;
        for (int i = 1; i < len; i ++) {
            dp[i][1] = Math.max(dp[i - 1][0], dp[i - 1][1] + arr[i]);
            dp[i][0] = Math.max(dp[i - 1][0], 0) + arr[i];
            res = Math.max(res, Math.max(dp[i][0], dp[i][1]));
        }
        return res;
    }
}

 由于只用到了第 i - 1 个位置的情况,所以可以将数组化简为两个变量。

class Solution {
    public int maximumSum(int[] arr) {
        int res = arr[0];
        int dp0 = arr[0];
        int dp1 = 0;
        for (int i = 1; i < arr.length; i ++) {
            dp1 = Math.max(dp0, dp1 + arr[i]);
            dp0 = Math.max(dp0, 0) + arr[i];
            res = Math.max(res,Math.max(dp1, dp0));
        }        
        return res;
    }
}

标签:力扣,arr,1186,res,---,int,Math,数组,dp
From: https://www.cnblogs.com/allWu/p/17510022.html

相关文章

  • iText 0.30 - 0.99 (February 14, 2000 - May 1, 2003)
      ChangelogsiText0.30-0.99(February14,2000-May1,2003)iText0.30-0.99(February14,2000-May1,2003)In1998-1999,BrunowrotehisfirstPDFlibrary,butifyouwantedtouseit,youneededtobeaPDFspecialist:youneededtoknowallabout......
  • 海康威视DS-8864N-R8/4K 64路高性能8盘位录像机
     海康威视DS-8864N-R8/4K64路高性能8盘位录像机尺寸440mm(宽)*461mm(深)*94mm(高)机箱2U标准机箱工作温度工作:0℃~50℃,储藏:-10℃~70℃功耗(不含硬盘)≤85W风扇1个风扇,不支持调速电源规格100~240VAC电源ATX电源盘位8个SATA接口可售卖地北京;天津;河北;山西;内蒙古;辽......
  • Java并发(十二)----线程应用之多线程解决烧水泡茶问题
    1、背景统筹方法,是一种安排工作进程的数学方法。它的实用范围极广泛,在企业管理和基本建设中,以及关系复杂的科研项目的组织与管理中,都可以应用。怎样应用呢?主要是把工序安排好。比如,想泡壶茶喝。当时的情况是:开水没有;水壶要洗,茶壶、茶杯要洗;火已生了,茶叶也有了。怎么办?办法甲......
  • Qemu中生成针对具体体系结构的纯净代码的方法---利用GCC的-E选项
      实验室正在研究一个叫做Qemu的项目,外国人写的初始代码。里面很多内容是我们不需要的,但是却参杂在我们关注的代码中。突然想到了一个编译命令-E,它能够一下子就把那些不需要的代码过滤掉。以前几次开会大家都抱怨这个东西干扰信息太多,导致代码分析的连贯性总是被打断,进度特别慢......
  • 【五期邹昱夫】CCF-B(IEEE Access'19)Badnets: Evaluating backdooring attacks on deep
    "Gu,Tianyu,etal."Badnets:Evaluatingbackdooringattacksondeepneuralnetworks."IEEEAccess7(2019):47230-47244."  本文提出了外包机器学习时选择值得信赖的提供商的重要性,以及确保神经网络模型安全地托管和从在线存储库下载的重要性。并展示了迁移学习场......
  • java-集合类学习
    LinkedHashMapAspecialconstructorisprovidedtocreatealinkedhashmapwhoseorderofiterationistheorderinwhichitsentrieswerelastaccessed,fromleast-recentlyaccessedtomost-recently(access-order).Thiskindofmapiswell-suitedtobu......
  • linux命令学习-目录大小du
    du命令:显示目录包含的文件大小du可以让我们知道文件和目录所占的空间大小du命令会深入遍历每个目录的子目录,统计所有文件的大小是英语diskusage的缩写,表示“磁盘使用/占用”-h以Ko,Mo,Go的形式显示文件大小-a会显示目录和文件的大小-s只显示当前目录的总大小......
  • 01-点亮你的LED灯
    目录一.单片机的内部资源二.单片机最小系统三.点亮第一个小灯一.单片机的内部资源Flash程序存储空间:在早期单片机中,主要使用的是OTPROM(只能写入一次程序).后来出现Flash可重复擦写程序价格低,且断电依然可保存数据.RAM数据存储空间:用于存储程序运行过程中产生的......
  • pta第三部分总结oop训练集09-11
    一,前言:oop09:7-1统计Java程序中关键词的出现次数:对Java中字符串,元字符,正则表达式的应用。oop10:7-1容器-HashMap-检索:对Java程序中HashMap的特性对输入内容进行检索的应用。7-2容器-HashMap-排序:对Java升序中HashMap的无序性的应用将其排序。7-3课程成绩......
  • 海康硬盘录像机 DS-8800N-R84K介绍
    经销R-4K系列8盘位NVR可接驳符合ONVIF、RTSP标准及众多主流厂商的网络摄像机;支持H.265、Smart265、H.264、Smart264编码的前端设备自适应接入;支持最大网络接入带宽400Mbps,最大支持1200万像素高清网络视频的预览、存储与回放;支持热成像相机的接入、存储、报警;解码性能强劲,......