当前位置: 首页 > news >正文

环形子数组的最大和

问题描述与解题思路

题目链接
在这里插入图片描述

这个题的特殊之处就在于它子数组的选取方式,比如[1,2,3,4]这个数组
,我们以3为子数组的起点,子数组的选取情况如下:

  • 3
  • 3 4
  • 3 4 1
  • 3 4 1 2

那么对于本题的解题方式,我们依然是要通过分类讨论,将这个环形数组的问题转化成我们普通最大子数组的问题来求和(就和打家劫舍2那道题目的思路是一样的)

看下面这张图,如果我们遍历到的子数组是我们的普通情况,那就按照我们之前处理过的模板来解决。如果我们遍历到的子数组是这种头一段尾一段的情况。那也很好办,因为它的补集——中间的这个数组就属于我们的普通情况,我们要求外面这个数组的最大和,只需要求中间这个数组的最小和就行了,求出来之后拿整个数组的和一减就能得到我们要的结果。
在这里插入图片描述

确定本题的状态表示

通过上面的分析,我们已经讲一个环形子数组和问题转化成了一个普通的子数组和问题,然后我们后面去求f[i]的时候就不用考虑那种分布在两头的子树组了(比如 对于[0 1 2 3 ]求 f[1],你不用考虑以1为尾,以3为首的子数组,因为这种情况自有我们的g数组来去处理,你在进行动态规划填充的时候仍然只需要老老实实的做你的普通数组问题即可)
在这里插入图片描述

确定本题的状态转移方程

在这里插入图片描述

初始化

返回值

整体思路就是找到f数组里面的最大值。以及g数组里面的最小值,比较出max(f_max,sum - g_min),但是这里还需要考虑一种特殊情况,就是你数组里面的数全是负数。
在这里插入图片描述

代码实现

int maxSubarraySumCircular(vector<int>& nums)
{// 1. 创建 dp 表// 2. 初始化// 3. 填表// 4. 返回结果int n = nums.size();vector<int> f(n + 1), g(n + 1);int fmax = INT_MIN, gmin = INT_MAX, sum = 0;for(int i = 1; i <= n; i++){int x = nums[i - 1];f[i] = max(x, x + f[i - 1]);fmax = max(fmax, f[i]);g[i] = min(x, x + g[i - 1]);gmin = min(gmin, g[i]);sum += x;}return sum == gmin ? fmax : max(fmax, sum - gmin);
}
http://www.dtcms.com/a/343113.html

相关文章:

  • Ubuntu24.04 交叉编译libuv库(已编译好的) 之undefined reference to `pthread_getname_np‘解决
  • VMware Workstation里的Ubuntu22.04找不到共享文件夹
  • Ubuntu Server 安装 gvm 管理 Go 语言开发环境
  • 代码随想录Day58:图论(拓扑排序精讲、最短路算法dijkstra朴素版精讲)
  • Android焦点窗口变化导致遥控键值监听失效问题分析
  • AI编程避坑指南:常见错误与解决策略
  • 年化42%,最大回撤18%,卡玛比率2.3的策略可查看参数 | 全A股市场构建技术方案
  • 数据库审计是什么?主要功能详解与厂商解析
  • 第7章 区分鸟和飞机:从图像学习
  • 【网络运维】初见Shell:Shell 变量基础知识
  • Vue图解!!!Vue的生命周期管理【7】
  • MFC中使用libtorch的实例
  • 【一分钟教程】用ZMC600E实现关节机器人±180度精准转动
  • Ubuntu网络图标消失/以太网卡显示“未托管“
  • 人工智能之数学基础:随机变量和普通变量的区别?
  • 什么是测度?
  • 实践题:智能客服机器人设计
  • 魔乐开发者教程 | 基于openMind实现大模型微调指南(二):大模型微调实操
  • 图像边缘检测
  • Spring AI 入门学习指南
  • 2025.8.21总结
  • CMake使用【c/c++】
  • 2025Java面试红皮书:1000道BAT真题详解
  • plc与plc无线通讯实现PLC1200和ET200SP无线通讯解决方案实践
  • uniapp 懒加载图片
  • 力扣面试150(62/150)
  • SAP FIORI Elements深度定制:注解扩展与审批流程增强完全指南
  • 软件工程 + AI 不是 “硬凑”,3 步走通落地关键环节
  • es6新语法
  • LLaVA-3D,Video-3D LLM,VG-LLM,SPAR论文解读