算法笔记-lc-1800. 最大升序子数组和(简单)

C语言:最大子数组和问题——分治策略 给出一个数组,要求计算出它的子数组和的最大值采用分治策略,最大的子数组有三种情况:一,在中间项的左侧;二,在中间项的右侧;三,跨越中间项。然后再此三种情况下找到最值;#include<stdio.h>int FindChileArray(int arr[],int low,int high);int FindChileArray_coenter(int arr[],int low,in... 阅读详情

@[TOC](算法笔记-lc-1800. 最大升序子数组和(简单))

题目

题干

给你一个正整数组成的数组 nums ,返回 nums 中一个 升序 子数组的最大可能元素和。

子数组是数组中的一个连续数字序列。

已知子数组 [numsl, numsl+1, …, numsr-1, numsr] ,若对所有 i(l <= i < r),numsi < numsi+1 都成立,则称这一子数组为 升序 子数组。注意,大小为 1 的子数组也视作 升序 子数组。

示例

示例 1:

输入:nums = [10,20,30,5,10,50]
输出:65
解释:[5,10,50] 是元素和最大的升序子数组,最大元素和为 65 。
示例 2:

输入:nums = [10,20,30,40,50]
输出:150
解释:[10,20,30,40,50] 是元素和最大的升序子数组,最大元素和为 150 。
示例 3:

输入:nums = [12,17,15,13,10,11,12]
输出:33
解释:[10,11,12] 是元素和最大的升序子数组,最大元素和为 33 。
示例 4:

输入:nums = [100,10,1]
输出:100

提示:

1 <= nums.length <= 100
1 <= nums[i] <= 100

题解

方法一:动态规划

思路与算法

题目给定了一个长度为 n 的正整数数组nums,现在要求一个升序的子数组最大可能的元素和。那么我们设dp[i] 表示以 nums[i] 结尾的的最长升序子数组的元素和。那么我们考虑如何求解每一个状态:

当nums[i]>nums[i−1] 时:
dp[i]=dp[i−1]+nums[i]

当 nums[i]≤nums[i−1] 时:
dp[i]=nums[i]

以上的讨论是建立在 i>0 的情况,我们还需要考虑动态规划的边界条件,即 i = 0况:此时nums[0] 前面没有元素,本身可以构成一个长度为 1 的子数组,即 dp[0]=nums[0]。

又因为求解状态的过程只和前一个状态有关, 所以可以用「滚动数组」的方法来进行空间优化。

class Solution {
    public int maxAscendingSum(int[] nums) {
        int res = 0;
        int l = 0;
        while (l < nums.length) {
            int cursum = nums[l++];
            while (l < nums.length && nums[l] > nums[l - 1]) {
                cursum += nums[l++];
            }
            res = Math.max(res, cursum);
        }
        return res;
    }
}

复杂度分析

时间复杂度:O(n),其中 n 为数组nums 的长度。
空间复杂度:O(1),仅使用常量空间。

开源代码分享(29)-基于拉丁超立方抽样的风光场景生成和削减 作为分层抽样方法的一 种,拉丁超立方抽样具有良好的抽样精度和效率[14]。本文使用多场景方法来描述可再生能源(风电、光伏)的不确定性。以风电功率为例,首先假定风电功率服从正态分布 N(μ, δ 2 ),μ 为预测值的期望值,δ 为其波动的百分比。接着,采用拉丁超立方抽样[21]生成大量服从概率分布约束的风电出力场景,并采用考虑 Kantorovich 距离[22]的场景削减技术处理该场景,进行场景削减。最后,导出具有相应概率的削减之后的场景。 阅读详情

相关推荐

结构光三维重建2——多频外差解包裹

本文深入解析了结构光三维重建中的多频外差解包裹技术。针对四步相移法产生的相位包裹问题,该方法通过投影多组不同频率的条纹光,利用外差原理逐级解算,最终获得精确、连续的绝对相位值,是实现高精度、稳健三维重建的关键步骤。

weixin_29056101的博客 350

LeetCode-1800. 最大升序子数组和_JavaScript

给你一个正整数组成的数组 nums ,返回 nums 中一个 升序 子数组的最大可能元素和。 子数组是数组中的一个连续数字序列。 已知子数组 [numsl, numsl+1, …, numsr-1, numsr] ,若对所有 i(l <= i < r),numsi < numsi+1 都成立,则称这一子数组为 升序 子数组。注意,大小为 1 的子数组也视作 升序 子数组。 示例 1: 输入:nums = [10,20,30,5,10,50] 输出:65 解释:[5,10,..

weixin_45344430的博客 474

基于STM32F427的模拟SSI协议绝对式编码器位置反馈通信

基于STM32F427的模拟SSI协议绝对式编码器位置反馈通信

xeke997的博客 6064

力扣 53. 最大子数组和(C语言+分治递归、动态规划)

给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。是数组中的一个连续部分。

qq_51167531的博客 5346

vivado Block Design 设计 .tcl 文件使用,导出,修改,添加方式

在vivado中生成 Block Design可以导出tcl文件进行保存(体积小),或者在别的版本vivado中打开(版本互通),这是一个非常好的功能。另外GitHub中很多项目都是采用这种方式上传的,学会如何使用可以快速修改历程项目。

2203_75345038的博客 2493

KEIL MDK实战:如何用fromelf工具解析STM32的ELF文件结构(附完整命令行)

本文详细介绍了如何使用KEIL MDK中的fromelf工具解析STM32的ELF文件结构,包括内存段分析、符号表追踪和反汇编关键函数等实战技巧。通过完整的命令行示例,帮助嵌入式开发者优化内存占用、排查运行时问题,并提升STM32项目的开发效率。

weixin_42631411的博客 187

最大子列和问题的四种算法(C语言)

本文将按照理解难度递增,执行效率递增的顺序介绍求最大子列和的四种算法。 问题描述 给定N个整数的序列{A1,A2,…,AN,},求序列的最大子列和 算法一 算法一为最容易想到的一种算法,即找处序列的所有子列,对面一个子列进行求和,通过比较找出最大子列和。 这种算法的的时间复杂度T(N)=O(N3) int MaxSubseqSum1( int A[], int N ) { int This...

qq_44874745的博客 3520

卡尔曼滤波原理详解及系统模型建立(simulink)

卡尔曼滤波原理详解及系统模型建立(simulink) 卡尔曼滤波器 卡尔曼滤波器是在上个世界五六十年代的时候提出的,到今天已经有六十年左右的时间,但卡尔曼滤波算法不管在控制、制导、导航或者通讯方面对数据的预测能力依然处在一个不可撼动的位置上,但是很多人对于其算法内部的工作原理究竟是怎么运作的依然不理解,所以在工程上很多人都只是把卡尔曼滤波当成是一种“黑箱”预测算法,并不清楚内部原理。但实际上没有任...

weixin_43942325的博客 7万+

最大子序和之C语言的解法

一、题目描述 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大为 6。 二、我的思路 就是数组之间的元素相加。定义两个变量,一个存储当前相加的和sum,一个是数组的首元素max,依次相加。当相加的字段和小于0是,就...

qq_43411563的博客 366

【C++】开源:ncurses终端TUI文本界面库

ncurses配置使用(TUI)

DevFrank的博客 3165

启动launch文件时显示找不到franka_ign_ros2_control-system...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 695

最大升序子数组和

原题指路 最大升序子数组和 题目描述 给你一个正整数组成的数组 nums ,返回 nums 中一个 升序 子数组的最大可能元素和。 子数组是数组中的一个连续数字序列。 已知子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,若对所有 i(l <= i < r),numsi < numsi+1 都成立,则称这一子数组为 升序 子数组。注意,大小为 1 的子数组也视作 升序 子数组。 解题思路 这道题用动态规划即可解决问题,在每次递增子数组结束时,用状态转移

swilliamss的博客 316

educoder中Hive综合应用案例 — 用户搜索日志分析

Hive综合应用案例 — 用户搜索日志分析

weixin_46026136的博客 4772

刷题记录 最大升序子数组和

秋招个人刷题记录

zkp34的博客 235

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

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

力扣-1800题(Java)

题目链接:https://leetcode-cn.com/problems/maximum-ascending-subarray-sum/ 题目如下: class Solution { public int maxAscendingSum(int[] nums) { int i,sum=nums[0],max=nums[0]; for(i=1;i<nums.length;i++){ if(nums[i]>nums[i-1]) s

qq_40467670的博客 287

最长递增子序列

最长递增子序列的案例,理解,思路与解法实践

每行代码都热烈滚烫。 1282

2020-10-22

cpp排列组合问题:用1-9不重复组成三个三位数,使其和为特定值 对于标题中的问题,仍有一个限制:只能使用选择结构和循环结构,不可以定义函数或者使用字符串、指针。。。 对于初学者来说,可能乍一看并没有头绪。但是细想一下,如果让我们手动枚举所有的情况,该怎样做呢? 或许第一个念头是分三个三位数进行枚举,这样本身是没有问题的,但可能会出现重复的情况。也就是说,123、456、789与789、456、123同属一种情况。那么接下来我们就会考虑去排除,这就需要先"记住"每一种分配方式,显然是

weixin_51196830的博客 320

算法导论-分而治之-最大子数组(含动态规划解法)

分治法把一个问题分成(同类的)几个子问题。递归地解决(征服)每个子问题。将子问题的解决方案组合成整体解决方案。通常的使用将大小为n的问题分成两个大小为n / 2的子问题。递归求解(攻克)两个子问题。将两个方案组合成整体方案。当子问题足够大以进行递归求解时,称其为递归情况(recursive case)一旦子问题变得很小,以至不再需要递归的程度,就说递归“结束(bottom out)”了,已经回到了基本情况(base case)

qq_63645899的博客 2610

求子集(递归回溯+二进制+迭代)

求一个集合的所有非空子集 1.题目描述 请编写一个方法,返回某集合的所有非空子集。 给定一个int数组A和数组的大小int n,请返回A的所有非空子集。 保证A的元素个数小于等于20,且元素互异。 各子集内部从大到小排序,子集之间字典逆序排序 2.思路图解 3.代码实现 import java.util.*; /** 请编写一个方法,返回某集合的所有非空子集。 给定一个int数组A和数组...

sparky的博客 2391

数据结构和算法 最大和连续子数组

Kadane算法使用最优子结构的方式(在每个位置结束的最大子数组是从一个相关但较小且重叠的子问题中以简单的方式计算出来的:在前一个位置结束的最大子数组)这个算法可以被视为一个简单的例子的动态规划。Kadane算法能够在运行时间为O(n)的数组中找到连续子数组的最大和。

学以致用 知行合一 791

带你吃透分治算法 (一)最大子数组

分治算法 分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。就像归并排序的排序思想一样。 回忆一下归并排序的过程,我们在递归地求解一个问题时,在每层递归中应用了以下三个步骤: 分解:将原问题划分为子问题,子问题的形式(性质)和原问题一样,只是规模变小了 解决:当子问题的规模非常小了(如递归排序中排序元素只有一个时),则停止递归,直接进行求解。 合并:将划分的两个子问题的解组合成原问题的解,不过有时我们会遇到需要求解

qq_42642142的博客 1634

最大子数组问题的两种解法

所谓最大子数组就是连续的若干数组元素,如果其和是最大的,那么这个子数组就称为该数组的最大子数组。最大子数组是很多问题的抽象,比如购买股票。如果把相邻两天的股价之差作为数组元素,那么求在连续的某个时间段内买入股票的最佳时间和卖出股票的最佳时间就可以抽象为计算最大子数组的问题。下面分别介绍两种算法求解最大子数组问题,算法思想均来自算法导论这本程序员的圣经。 分治法 分治法实现思路比较简单。如果把一...

T-tian的博客 8078

最大累加和子数组算法动态图

lizequan的博客 206

leetcode 5709. 最大升序子数组和

给你一个正整数组成的数组 nums ,返回 nums 中一个 升序 子数组的最大可能元素和。 子数组是数组中的一个连续数字序列。 已知子数组 [numsl, numsl+1, …, numsr-1, numsr] ,若对所有 i(l <= i < r),numsi < numsi+1 都成立,则称这一子数组为 升序 子数组。注意,大小为 1 的子数组也视作 升序 子数组。 示例 1: 输入:nums = [10,20,30,5,10,50] 输出:65 解释:[5,10,50] 是元素和最

天使之翼 568

如何提高知识水平和leetcode contest rating力扣周赛分数(1800、1900分水平可看)

如何提高知识水平的一些心灵鸡汤、方法论和推荐资源

小玉沙丘的博客 1万+
上一篇: spring到底为什么要用三级缓存?
下一篇: 算法笔记-lc-927. 三等分(困难)
Hell_potato777
博客等级 码龄6年 47粉丝 106原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值