Leetcode.1749 任意子数组和的绝对值的最大值

题目链接

Leetcode.1749 任意子数组和的绝对值的最大值 rating : 1542

题目描述

给你一个整数数组 n u m s nums nums 。一个子数组 [ n u m s l , n u m s l + 1 , . . . , n u m s r − 1 , n u m s r ] [numsl, numsl+1, ..., numsr-1, numsr] [numsl,numsl+1,...,numsr1,numsr] 的 和的绝对值 为 ∣ n u m s l + n u m s l + 1 + . . . + n u m s r − 1 + n u m s r ∣ |numsl + numsl+1 + ... + numsr-1 + numsr| numsl+numsl+1+...+numsr1+numsr

请你找出 n u m s nums nums 中 和的绝对值 最大的任意子数组(可能为空),并返回该 最大值

a b s ( x ) abs(x) abs(x) 定义如下:

  • 如果 x x x 是负整数,那么 a b s ( x ) = − x abs(x) = -x abs(x)=x
  • 如果 x x x 是非负整数,那么 a b s ( x ) = x abs(x) = x abs(x)=x

示例 1:

输入:nums = [1,-3,2,3,-4]
输出:5
解释:子数组 [2,3] 和的绝对值最大,为 abs(2+3) = abs(5) = 5 。

示例 2:

输入:nums = [2,-5,1,-4,3,-2]
输出:8
解释:子数组 [-5,1,-4] 和的绝对值最大,为 abs(-5+1-4) = abs(-8) = 8 。

提示:

  • 1 ≤ n u m s . l e n g t h ≤ 1 0 5 1 \leq nums.length \leq 10^5 1nums.length105
  • − 1 0 4 ≤ n u m s [ i ] ≤ 1 0 4 -10^4 \leq nums[i] \leq 10^4 104nums[i]104

解法:动态规划

我们定义 f ( i ) f(i) f(i) 是以 n u m s [ i ] nums[i] nums[i] 结尾的最大子数组和

f ( i ) f(i) f(i) 既可以是 n u m s [ i ] nums[i] nums[i] 接在 f ( i − 1 ) f(i-1) f(i1) 后面,也可以就是单独的一个 n u m s [ i ] nums[i] nums[i]

所以,

f ( i ) = m a x { f ( i − 1 ) , 0 } + n u m s [ i ] f(i) = max\{f(i - 1) , 0\} + nums[i] f(i)=max{f(i1),0}+nums[i]

我们定义 g ( i ) g(i) g(i) 是以 n u m s [ i ] nums[i] nums[i] 结尾的最小子数组和

同理,

g ( i ) = m i n { g ( i − 1 ) , 0 } + n u m s [ i ] g(i) = min\{g(i - 1) , 0\} + nums[i] g(i)=min{g(i1),0}+nums[i]

所以我们最终的答案为 m a x { f ( i ) , − g ( i ) } max\{ f(i) , -g(i)\} max{f(i),g(i)}

在实现上我们可以只用两个变量来表示。

时间复杂度: O ( n ) O(n) O(n)

C++代码:

class Solution {
public:int maxAbsoluteSum(vector<int>& nums) {int mi = 0 , mx = 0 , ans = 0;for(auto x:nums){mx = max(mx , 0) + x;mi = min(mi , 0) + x;ans = max({ans,mx,-mi});}return ans;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/27567.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql支持的xa具体指的是什么?

在MySQL中&#xff0c;XA指的是一种事务协议&#xff08;eXtended Architecture&#xff09;&#xff0c;用于支持分布式事务。XA协议允许应用程序跨多个独立的数据库资源&#xff08;例如多个MySQL实例&#xff09;执行分布式事务。 具体来说&#xff0c;XA协议提供了以下关键…

mongoose 解析接口参数

http://127.0.0.1:3003/gt?duration[lte]4 mongoose 查询 lt 小于 lte 小于等于 gt 大于 gte 这些参数可以放在链接里面 let re await M.find(req.query); //method 1let queryObj JSON.stringify(req.query).replace(/\b(lt|lte|gt|gte)\b/g, (match) > $${matc…

容器安全的常见风险与防护实践

运行在云平台上的容器产品&#xff0c;因为具备一个完整的可移植应用程序环境&#xff0c;能够帮助用户轻松地完成对应用程序的开关控制&#xff0c;提升应用程序的敏捷性&#xff0c;同时节约企业的IT建设成本。在巨大优势作用下&#xff0c;容器产品的采用率在2021年达到了新…

小研究 - Mysql快速全同步复制技术的设计和应用(三)

Mysql半同步复制技术在高性能的数据管理中被广泛采用&#xff0c;但它在可靠性方面却存在不足.本文对半同步复制技术进行优化&#xff0c;提出了一种快速全同步复制技术&#xff0c;通过对半同步数据复制过程中的事务流程设置、线程资源合理应用、批量日志应用等技术手段&#…

全栈测试平台推荐:RunnerGo

做软件测试的同学在工作时应该都碰到过这种情况&#xff1a;接口管理、接口测试用postman、Apipost等接口管理工具&#xff0c;性能测试用jmeter、loadrunner等性能测试工具&#xff0c;接口自动化则是jmeter脚本或者python脚本配合jenkins使用。这种情况极大的降低了研发效率&…

RedisTemplate.opsForList()用法简介并举例

RedisTemplate.opsForList()是RedisTemplate类提供的用于操作List类型的方法。它可以用于对Redis中的List数据结构进行各种操作&#xff0c;如添加元素、获取元素、删除元素等。 下面是一些常用的RedisTemplate.opsForList()方法及其用法示例&#xff1a; leftPush&#xff1…

Linux下的环境变量

目录 一、环境变量是什么&#xff1f;二、常见的环境变量三、查看环境变量的方法四、和环境变量相关的命令五、命令行参数五、环境变量通常是具有全局属性的 一、环境变量是什么&#xff1f; 环境变量通俗来说就是一种存储系统和应用程序运行需要的配置信息的方式。可以把环境…

MySQL数据库基础

目标&#xff1a; 1.数据库操作&#xff1a;创建数据库&#xff0c;删除数据库 2.常用数据类型 3.表的操作&#xff1a;创建表&#xff0c;删除表 数据库操作 &#xff08;1&#xff09;显示数据库 show databases&#xff1b; &#xff08;2&#xff09;创建数据库 创建一个…

Playwright 和 Selenium 的区别是什么?

前言 最近有不少同学问到 Playwright 和 Selenium 的区别是什么&#xff1f; 有同学可能之前学过 selenium 了&#xff0c;再学一个 playwright 感觉有些多余&#xff0c;可能之前有项目已经是 selenium 写的了&#xff0c;换成 playwright 需要时间成本&#xff0c;并且可能有…

算法的时间复杂度和空间复杂度

目录 前言&#xff1a; ✨什么是数据结构&#xff1f; ✨ 什么是算法&#xff1f; ✨数据结构和算法的重要性 &#x1f351;算法的时间复杂度和空间复杂度 算法效率 &#x1f389;时间复杂度 2.1 时间复杂度的概念 2.2 大O的渐进表示法 &#x1f389;空间复杂度 前言&#xf…

P1908 逆序对

逆序对 题目描述 猫猫 TOM 和小老鼠 JERRY 最近又较量上了&#xff0c;但是毕竟都是成年人&#xff0c;他们已经不喜欢再玩那种你追我赶的游戏&#xff0c;现在他们喜欢玩统计。 最近&#xff0c;TOM 老猫查阅到一个人类称之为“逆序对”的东西&#xff0c;这东西是这样定义…

Linux中安装jdk

Linux中安装jdk 操作步骤: 1、使用FinalShell自带的上传工具将jdk的二进制发布包上传到Linux 2、解压安装包&#xff0c;命令为tar -zxvf jdk-8u171-linux-x64.tar.gz -C/usr/local 3、配置环境变量&#xff0c;使用vim命令修改/etc/profile文件&#xff0c;在文件末尾加入如…

排序算法(九大)- C++实现

目录 基数排序 快速排序 Hoare版本&#xff08;单趟&#xff09; 快速排序优化 三数取中 小区间优化 挖坑法&#xff08;单趟&#xff09; 前后指针法&#xff08;单趟&#xff09; 非递归实现&#xff08;快排&#xff09; 归并排序 非递归实现&#xff08;归并&am…

2、简单上手+el挂载点+v-xx(v-text、v-html、v-on、v-show、v-if、v-bind、v-for)

官网&#xff1a; vue3&#xff1a;https://cn.vuejs.org/ vue2&#xff1a;https://v2.cn.vuejs.org/v2/guide/ 简单上手&#xff1a; 流程&#xff1a; 导入开发版本的Vue.js <!--开发环境版本&#xff0c;包含了有帮助的命令行警告--> <script src"https…

何时使用Elasticsearch而不是MySql

MySQL 和 Elasticsearch 是两种不同的数据管理系统&#xff0c;它们各有优劣&#xff0c;适用于不同的场景。本文将从以下几个方面对它们进行比较和分析&#xff1a; 数据模型 查询语言 索引和搜索 分布式和高可用 性能和扩展性 使用场景 数据模型 MySQL 是一个关系型数…

单片机开发 esp8266

一、固件界面 二、项目介绍 固件名称&#xff1a;esp8266-universalboard v1.0 提供商&#xff1a; 半条虫(466814195) 下载&#xff1a;esp8266-universalboard.bin 源码地址&#xff1a;Gitlab

【Python】Pandas 简介,数据结构 Series、DataFrame 介绍,CSV 文件处理,JSON 文件处理

序号内容1【Python】Pandas 简介&#xff0c;数据结构 Series、DataFrame 介绍&#xff0c;CSV 文件处理&#xff0c;JSON 文件处理2【Python】Pandas 数据清洗操作&#xff0c;常用函数总结 文章目录 1. Pandas 简介2. Pandas 数据结构1. Series&#xff08;一维数据&#xff…

CISCO MDS 9148 SAN Switch 交换机命令配置方法:

前言 CISCO MDS 9148 SAN 交换机已经停产&#xff0c;但还是要掌握一下配置的方法&#xff1a; 升级款后面 9148S 或者 9100系列&#xff0c;但配置方式基本都差不多&#xff0c;掌握一个就好&#xff1a; 高性能和极具吸引力的价值 Cisco MDS 9148S 16G 多层光纤交换机是下…

基于Orangepi 3 lts 的云台相机

利用orangepi 3 lts 和arduino nano 制作了一个云台相机&#xff0c;可用于室内监控。 硬件&#xff1a; orangepi 3 ,arduino nano ,usb相机&#xff0c;180度舵机两个 WeChat_20230806213004 软件&#xff1a; 整体采用mqtt进行消息的中转。 相机采用python 利用opencv…

数据结构——二叉树

本章代码仓库&#xff1a;堆、二叉树链式结构 文章目录 &#x1f36d;1. 树&#x1f9c1;1.1 树的概念&#x1f9c1;1.2 树的结构 &#x1f36c;2. 二叉树&#x1f36b;2.1 二叉树的概念&#x1f36b;2.2 特殊的二叉树&#x1f36b;2.3 二叉树的性质&#x1f36b;2.4 二叉树的存…