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 IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】