二维DP: leetcode 1186、

动态规划-二维dp数组和滚动数组 二维数组 如上图,一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径? 看到这道题,查找从A点到B点的路径,如果对图论比较熟悉的话,可能第一印象是用图论的深度优先搜索来实现. func dfs(i int, j int, m int, n int) int { if i > m || j > n { return 0 阅读详情

leetcode 1186:删除一次得到子数组最大和

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

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

示例 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

思路: 二维DP
dp[i][2] 状态定义成二维的,因为可能已经删除过一个,可能还没有删除过
dp[i][0]: 以i为结尾的子数组没有删除过最大和
dp[i][1]:以i为结尾的子数组删除过一次最大和
此题此外还需要注意的是需要保证最后的数组的长度不能是0,所以在初始化的时候做了一点处理,对长度为1(题目中说长度是>= 1的)时进行了求解。
剩下的部分正常进行状态转移

import sys
maxint = sys.maxsize

class Solution:
    def maximumSum(self, arr: List[int]) -> int:
        dp = [[-maxint for _ in range(2)] for _ in range(len(arr))]
        # dp[i][0]到i还没有删除过 dp[i][1]表示已经删除过一次
        if len(arr) == 1:
            return arr[0]
        dp[0][0] = arr[0]
        dp[0][1] = 0
        dp[1][0] = max(arr[0]+arr[1], arr[1])
        dp[1][1] = max(arr[0], arr[1])
        res = max(dp[1][0], dp[1][1])
        for i in range(2, len(arr)):
            dp[i][0] = max(dp[i - 1][0] + arr[i], arr[i])  #接着之前的继续,还是自己开始
            dp[i][1] = max(dp[i - 1][1] + arr[i], dp[i - 1][0]) # 不删除这次的值和之前已经删除的情况相加,或者删除这次的值
            res = max(res, dp[i][0], dp[i][1])
        return res
        

思路参考的题解链接

leetcode 376:摆动序列

题目描述:
如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。

例如, [1, 7, 4, 9, 2, 5] 是一个 摆动序列 ,因为差值 (6, -3, 5, -7, 3) 是正负交替出现的。

相反,[1, 4, 7, 2, 5] 和 [1, 7, 4, 5, 5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。
子序列 可以通过从原始序列中删除一些(也可以不删除)元素来获得,剩下的元素保持其原始顺序。

给你一个整数数组 nums ,返回 nums 中作为 摆动序列 的 最长子序列的长度 。

示例 1:
输入:nums = [1,7,4,9,2,5]
输出:6
解释:整个序列均为摆动序列,各元素之间的差值为 (6, -3, 5, -7, 3) 。

示例 2:
输入:nums = [1,17,5,10,13,15,10,5,16,8]
输出:7
解释:这个序列包含几个长度为 7 摆动序列。
其中一个是 [1, 17, 10, 13, 10, 16, 8] ,各元素之间的差值为 (16, -7, 3, -3, 6, -8) 。

示例 3:
输入:nums = [1,2,3,4,5,6,7,8,9]
输出:2

提示:
1 <= nums.length <= 1000
0 <= nums[i] <= 1000

思路: DP
状态定义:
dp[i][2]: 表示到i时摆动序列的最大长度,可以有i也可以没有i
dp[i][0]: 表示考虑到i,且最后一部分是上升的时候最大摆动序列长度
dp[i][1]: 表示考虑到i,且最后一部分是下降的时候最大摆动序列长度
在进行状态转移的时候,两者需要调用,因为需要考虑现在的增或者减的情况

import sys
maxint = sys.maxsize

class Solution:
    def wiggleMaxLength(self, nums: List[int]) -> int:
        dp = [[-maxint for _ in range(2)] for _ in range(len(nums))]
        if len(nums) == 1:
            return len(nums)
        dp[0][0], dp[0][1] = 1, 1
        res = 1
        for i in range(1, len(nums)):
            for j in range(i):  # 需要考虑i之前的所有可能的情况 因为可能之前的元素又饿时候是没有算进去的
                if nums[i] - nums[j] > 0:
                    dp[i][0] = max(dp[j][1] + 1, 1, dp[i][0])
                elif nums[i] - nums[j] < 0:
                    dp[i][1] = max(dp[j][0] + 1, 1, dp[i][1])
                elif nums[i] - nums[j] == 0:
                    dp[i][0] = 1
                    dp[i][1] = 1
            res = max(res, dp[i][0], dp[i][1])
        return res

时间复杂度是O(n^ 2)。

进一步想要减小时间复杂度至O(1)。
参考题解思路链接
在这里插入图片描述
在这里插入图片描述
画个图仔细思考一下确实是这样
相应的代码:

class Solution:
    def wiggleMaxLength(self, nums: List[int]) -> int:
        dp = [[0 for _ in range(2)] for _ in range(len(nums))]
        if len(nums) == 1:
            return len(nums)
        res = 0
        for i in range(1, len(nums)):
            if nums[i] - nums[i-1] > 0:
                dp[i][1] = dp[i-1][0] + 1
                dp[i][0] = dp[i - 1][0]
            elif nums[i] - nums[i-1] < 0:
                dp[i][0] = dp[i-1][1] + 1
                dp[i][1] = dp[i-1][1]
            elif nums[i] - nums[i-1] == 0:
                dp[i][0] = dp[i-1][0]
                dp[i][1] = dp[i-1][1]

        res = max(dp[-1][0], dp[-1][1]) + 1
        return res

时间复杂度是O(n),空间复杂度可以进一步优化,将dp数组转换成用两个数进行。

class Solution:
    def wiggleMaxLength(self, nums: List[int]) -> int:
        dp0, dp1 = 0, 0
        if len(nums) == 1:
            return len(nums)
        for i in range(1, len(nums)):
            if nums[i] - nums[i-1] > 0:
                dp1 = dp0 + 1
            elif nums[i] - nums[i-1] < 0:
                dp0 = dp1 + 1

        res = max(dp0, dp1) + 1
        return res
动态规划(DP)及相关经典问题讲解 前言 动态规划(DP)是计算机编程算法中非常重要的一个知识点,无论是校招 社招,面试官也经常喜欢出此类的编程题来考察面试者的编程能力, 这篇博客主要是概述一下dp的主要思想 然后重点归纳一下leetcode中 股票交易问题的讲解。 DP基础知识 DP简单可以总结为“一个模型三个特征”。 “一个模型”是指动态规划适合解决的问题的模型,也就是多阶段决策最优解模型(这个模型同时也是回溯 贪心解决问题的模型)。一般用动态规划解决最优问题时,解决问题需要经历多个决策阶段。每个决策阶段都对应着一组状态。然后我们寻找一 阅读详情

相关推荐

Silvaco 学习笔记——物理模型:载流子产生复合模型

对载流子的复合机制进行总结

reactortiger的博客 1万+

leetcode 1186.删除一次得到子数组最大和

说完了Kadane算法,我们再来看看本题,本题可以删去子数组中的一个元素或不删去。我们先考虑这样一个问题:如果将题意中的“删除一次”的约束删去,那么本题又该如何做呢?Kadane算法利用了动态规划的算法,只用遍历一遍数组即可找到子数组的最大和。,我们就可以得到子数组最大和。但是,这样做的时间复杂度是。个元素结尾的子数组的最大和。个元素结尾的而且不删去元素的子数组的最大和,以。首先,我们的直觉肯定是先用暴力,枚举每一个点。个元素结尾而且删去一个元素的子数组的最大和。的更新方式和上述Kadane算法相同,而。

akeyy的博客 859

Selenium ChromeDriver反爬与性能优化实战指南

ChromeDriver作为Selenium的核心驱动,本质是浏览器自动化执行引擎,其默认行为会暴露大量JS运行时指纹(如navigator.webdriver、window.chrome),极易被前端反爬系统识别;同时因进程管理粗放、渲染等待机制僵化,导致内存泄漏、僵尸进程和高并发下稳定性崩塌。本文围绕真实生产场景,系统解析浏览器指纹伪造原理、进程级资源管控策略、基于页面状态的智能等待范式,并提供Docker容器化、K8s弹性扩缩与Prometheus可观测性落地路径,助力开发者将ChromeDriver

weixin_29762151的博客 1259

LeetCode每日一题 1186. 删除一次得到子数组最大和

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

luoluoluooo的博客 245

logisim实验——通过2个半加器实现1-bit全加器,通过4个一位全加器构成4-bit加法器(详解)

一、由异或门和与门所构成的半加器: 二、由两个半加器构成的1-bit全加器: ..

zep 1万+

用FPGA驱动WS2812B点阵,手把手教你实现动态文字显示(附完整Verilog代码)

本文详细介绍了如何使用FPGA驱动WS2812B点阵实现动态文字显示,包括硬件连接、Verilog代码实现和动态效果设计。通过精确的时序控制和数据处理,读者可以掌握FPGA与WS2812B的交互技术,并实现炫酷的显示效果。附完整Verilog代码,适合硬件爱好者和工程师参考实践。

weixin_30482383的博客 669

LeetCode 1186. 删除一次得到子数组最大和(中等)

这道题是经典动态规划问题的变种,关键在于定义好状态和状态转移方程。通过维护两个状态(删除和不删除元素的最大和),我们可以在线性时间内解决这个问题。明确定义状态写出状态转移方程确定初始状态计算最终结果。

ZeroBugX的博客 455

Y-Branch and a closed y-branch loop

双臂后面的区域,我们将它的双臂使用一个波导进行了连接,使得它本身形成了一个闭合回路,因此,该结构被称作。它们均是用来对经过它们的光束能量进行分割的一种器件。首先,我们知道一点,在光波导层面,今天给大家介绍一下,什么是。

u011699626的博客 630

F.动态规划-入门DP-最大子数组和(最大子段和):1186. 删除一次得到子数组最大和

F.动态规划-入门DP-最大子数组和(最大子段和):1186. 删除一次得到子数组最大和解析

要努力去发光,而不是被照亮~ 563

C# 上位机 YOLO 实战:从数据采集到目标识别的全流程拆解

本文以工业螺栓缺陷检测为例,完整拆解了C#上位机+YOLO从数据采集到目标识别的全流程。数据采集:保证图像质量,线程安全采集,必要时归档数据;预处理:适配YOLO模型输入格式,复用对象减少内存开销;推理解析:正确解析张量结果,过滤低置信度目标;落地环节:可视化展示结果,实现工业交互和日志记录。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1454

PCL点云处理之计算点到空间直线距离的四种方法(二十三)

PCL点云处理之计算点到空间直线距离的四种方法

weixin_44329757的博客 3022

LeetCode 1186. 删除一次得到子数组最大和(DP)

1. 题目 给你一个整数数组,返回它的某个 非空 子数组(连续元素)在执行一次可选的删除操作后,所能得到的最大元素总和。 换句话说,你可以从原数组中选出一个子数组,并可以决定要不要从中删除一个元素(只能删一次哦),(删除后)子数组中至少应当有一个元素,然后该子数组(剩下)的元素总和是所有子数组之中最大的。 注意,删除一个元素后,子数组 不能为空。 示例 1: 输入:arr = [1,-2,0,3] 输出:4 解释:我们可以选出 [1, -2, 0, 3],然后删掉 -2,这样得到 [1, 0, 3],和最大

Michael是个半路程序员 2569

10|Git Diff 与增量代码识别:本次到底改了哪些代码?

本文介绍 Git Diff 和增量代码识别,帮助你理解精准测试如何先找到本次真正变化的代码。测试开发工程师。Java 后端开发工程师。质量平台 / DevOps 平台建设者。想了解精准测试落地方法的技术负责人。

专注 AI 精准测试平台实战落地,分享从代码 Diff 到回归决策的完整工程闭环。主张“先建数据链路,再上 AI 智能”,让测试从“靠经验”走向“基于风险”。 160

【LeetCode】1186. 删除一次得到子数组最大和

我们先看非常类似的简单题:53. 最大子序和 思路:这题使用动态规划表述比较简单,以dp[i]表示以第i个元素结尾的子数组最大和,于是我们可以很快得到状态转移, dp[i]=Math.max(dp[i-1]+nums[i],nums[i]);这样我们就记录了第i个元素结尾的最大子数组和了。 class Solution { public int maxSubArray(int[] nums) { int n=nums.length; int dp[]=new int

时光、疏离了记忆づ童话的博客 996

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

LeetCode:1186. Maximum Subarray Sum with One Deletion

这题超有意思。 这题是周赛的一题,做的我快抑郁了,竟然没有做出来。 我的想法是这样的:第一反应是dp,一维二维的都试了,但是都不行,写不出来,状态和方程都不好写。其实这时候应该反应过来dp不行了。 后来看了评论区,才知道应该这么做: 考虑这道题:求出以每个位置为开始点和终点的最大连续子数组和。那么对于i,去掉nums[i]之后的最大连续子数组和是maxEndHere[i-1]+maxStartH...

weixin_43462819的博客 204

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

leetcode 1186. Maximum Subarray Sum with One Deletion 删除一次得到子数组最大和

Problem:2d的动态规划, dp[2][n+1],dp[0][i]代表以arr[i-1]结尾的子字符串且删掉一个字符,dp[1][i]代表以arr[i-1]结尾的子字符串且不删除任何字符。

邹九的个人博客 101

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

leetcode *1186. 删除一次得到子数组最大和

【题目】*1186. 删除一次得到子数组最大和 给你一个整数数组,返回它的某个 非空 子数组(连续元素)在执行一次可选的删除操作后,所能得到的最大元素总和。 换句话说,你可以从原数组中选出一个子数组,并可以决定要不要从中删除一个元素(只能删一次哦),(删除后)子数组中至少应当有一个元素,然后该子数组(剩下)的元素总和是所有子数组之中最大的。 注意,删除一个元素后,子数组 不能为空。 请看示例: 示例 1: 输入:arr = [1,-2,0,3] 输出:4 解释:我们可以选出 [1, -2, 0, 3],然后

Sophia_fez的博客 529

LeetCode-Python-1186. 删除一次得到子数组最大和

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

Keep Coding 775

[Edp] lc53. 最大子序和(dp+分治+算法优化+详细分析)

文章目录1. 题目来源2. 题目解析 1. 题目来源 链接:53. 最大子序和 2. 题目解析 这题真的是绝了! 显然,暴力是 O(n2)O(n^2)O(n2) 的。dp 能做到 O(n)O(n)O(n) 时间,O(1)O(1)O(1) 空间。一般的分治时间是 O(nlogn)O(nlogn)O(nlogn),空间 O(logn)O(logn)O(logn)。本文参考题解给出的分治思想,能做到 O(n)O(n)O(n) 的时间,O(logn)O(logn)O(logn) 的空间,真是绝了! 变量写法远比数组

Y-puyu 的博客 498

LeetCode·每日一题·1186. 删除一次得到子数组最大和·动态规划

动态规划

m0_64560763的博客 546

leetCode 542 01矩阵(二维dp)

题目链接:点击查看 题目描述: 给定一个由 0 和 1 组成的二维矩阵,求每个位置到最近的 0 的距离。 输入输出: 输入: [[0,0,0], [0,1,0], [0,0,0]] 输出: [[0,0,0], [0,1,0], [0,0,0]] 输入: [[0,0,0], [0,1,0], [1,1,1]] 输出: [[0,0,0], [0,1,0], [1,2,1]] 题目分析: 一般来说,因为这道题涉及到四个方向上的最近搜索,所以很多人的第一反应可能..

在森林里麋了鹿 287

LeetCode 10 正则表达式匹配 二维dp

// 这题能知道状态是怎么定义: // 常规套路 dp[i][j] 表示s串前[0,i]与p串前[0,j]匹配结果 // 但状态不知如何跳转: // 但有一种跳转一定知道, 那就是当 s[i] == p[j] 时即: // s[i] == p[j] || p[j] == '.' 时, 毫无疑问 // dp[i][j] == dp[i - 1][j - 1] // 当s[i] != p[j]时 ...

TIMELIMITE的专栏 359

leetCode 64 最小路径和(二维dp,空间压缩)

题目链接:点击查看 题目描述: 给定一个 m × n 大小的非负整数矩阵,求从左上角开始到右下角结束的、经过的数字的和最小的路径。每次只能向右或者向下移动。 输入输出: 输入:grid = [[1,3,1],[1,5,1],[4,2,1]] 输出:7 输入:grid = [[1,2,3],[4,5,6]] 输出:12 题目分析: 我们可以定义一个同样是二维的 dp 数组,其中 dp[i][j] 表示从左上角开始到 (i, j) 位置的最优路径的数字和。因为每次只能向下或者向右移动

在森林里麋了鹿 323

leetcode动态规划(九)-0-1背包理论基础

首先从dp[i][j]的定义出发,如果背包容量j为0的话,即dp[i][0],无论是选取哪些物品,背包价值总和一定为0状态转移方程。

weixin_40198632的博客 834

动态规划(3)——二维dp

欢迎来到博主的专栏:算法解析博主ID:代码小豪。

2301_77239666的博客 1045

leetcode1186 -- 删除一次得到子数组最大和

题目 给你一个整数数组,返回它的某个非空子数组(连续元素)在执行一次可选的删除操作后,所能得到的最大元素总和。 换句话说,你可以从原数组中选出一个子数组,并可以决定要不要从中删除一个元素(只能删一次哦),(删除后)子数组中至少应当有一个元素,然后该子数组(剩下)的元素总和是所有子数组之中最大的。 注意,删除一个元素后,子数组 不能为空。 示例1: 输入:arr = [1,-2,0,3] 输出:...

鳞潜羽翔 578
上一篇: 前缀和题型总结 II :leetcode 1402、1310、1371、1171
下一篇: leetcode 剑指offer 31:栈的压入、弹出序列
coding_diamond
博客等级 码龄8年 8粉丝 131原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值