LeetCode -- 918. 环形子数组的最大和
遇到环形问题一般有两种考虑方法:
1.破环成链
2.分为数组中间部分和数组两边部分分别考虑
本题采用第二种考虑方法,将原数组分为中间部分和两边部分分别考虑。中间部分即为子数组最大和,两边部分计总和减去中间部分最小和。
class Solution { public: int maxSubarraySumCircular(vector<int>& nums) { int n= nums.size(); int sum = nums[0]; vector<int> f(nums); vector<int> g(nums); for(int i = 1; i < n; i ++ ) { f[i] = max(nums[i], f[i - 1] + nums[i]); g[i] = min(nums[i], g[i - 1] + nums[i]); sum += nums[i]; } int maxv = *max_element(f.begin(), f.end()); int minv = *min_element(g.begin(), g.end()); return max(maxv, sum - minv == 0 ? maxv: sum - minv); } };
分类:
lc练习
【推荐】博客园携手 AI 驱动开发工具商 Chat2DB 推出联合终身会员
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .Net程序员机会来了,微软官方新推出一个面向Windows开发者本地运行AI模型的开源工具
· 2024年终总结 : 迷茫, 尝试突破, 内耗, 释怀
· 2024个人总结
· JSON解析的这6种方案,真香!
· 开源商业化 Sealos 如何做到月入 160万