Leetcode第915题:分割数组(Partrition Array Into Disjoint Intervals)
解题思路
最终的是将一个数组分为两个数组:左数组和右数组。这两个数组满足:
- 左数组的最大值小于右数组的任何值。需要一个变量
left_max
来记录左数组的最大值。 - 左数组长度尽可能小。使用变量
idx
记录满足条件的数组位置。
左数组右边的值较小,则右边该值一定会划分到左数组。此时需要更新idx的位置,当遍历完整个数组后,idx的位置就是左数组的最后一个元素位置,右数组的所有值都大于left_max
。
核心代码如下:
class Solution { public: int partitionDisjoint(vector<int>& num) { int len = num.size(); int idx = 0; //标记返回位置 int max = num[0]; //记录当前循环最大值 int left_max = max; //记录左边数组的最大值 for (int i=0; i < len; i++) { if (left_max > num[i]) { idx = i; left_max = max; //idx位置右边有值更小,更新idx到该值 } max = std::max(max, num[i]); //右数组值更大,更新最大值(截止到当前位置i,包括左右数组) } //循环结束后,max值是整个数组最大值,idx所在位置右边值都比num[idx]大 return idx+1; } };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类