【每日一题】分割数组
创始人
2024-03-31 02:03:24
0

分割数组

  • 两次遍历
  • 一次遍历(优化空间复杂度)

题目链接

题目描述:

给定一个数组 nums ,将其划分为两个连续子数组 left 和 right, 使得:
left 中的每个元素都小于或等于 right 中的每个元素。
left 和 right 都是非空的。
left 的长度要尽可能小。
在完成这样的分组后返回 left 的 长度

用例可以保证存在这样的划分方法。

示例 1:

输入:nums = [5,0,3,8,6]
输出:3
解释:left = [5,0,3],right = [8,6]

示例 2:

输入:nums = [1,1,1,0,6,12]
输出:4
解释:left = [1,1,1,0],right = [6,12]

思路分析:

两次遍历

题目要我们left 中的每个元素都小于或等于 right 中的每个元素,我们可以理解为left中最大的元素小于等于right中最小的元素
怎么知道right中的最小值?
可以采用反向遍历的方法:创建个等大的MinRight数组,先放置最后一个元素,遍历判断当前i位置的nums的元素是否小于MinRight[i + 1]位置的元素。如图:
在这里插入图片描述
当minRight数组安置完后:
在这里插入图片描述
此时我们定义一个MaxLeft变量,用来记录left范围的最大值,遍历数组当我们发现MaxLeft <= MinRight[i + 1]时,就可以返回i + 1(长度)了。因为MinRight[i + 1]代表了i + 1位置及以后的最小值

代码如下:

class Solution {
public:int partitionDisjoint(vector& nums) {int n = nums.size();// 右数组的最小值vector MinRight(n);MinRight[n - 1] = nums[n - 1];for (int i = n - 2; i >= 0; i--){MinRight[i] = min(MinRight[i + 1], nums[i]);}int MaxLeft = MinRight[0];for (int i = 0; i < n - 1; i++){MaxLeft = max(MaxLeft, nums[i]);if (MaxLeft <= MinRight[i + 1]){return i + 1;}}// 题目保证有return n - 1;}
};

一次遍历(优化空间复杂度)

我们可以先设置一个变量pos来划分left和right区间,然后用LeftMax来记录left区间的最大值,向后遍历动态改变pos和LeftMax:后边遇比LeftMax小的元素就把pos移过去,这个时候有可能在中途就出现了比LeftMax更大的元素,所以还需要定义CurMax来记录出现过的最大的元素。

代码如下:

class Solution {
public:int partitionDisjoint(vector& nums) {int n = nums.size();int CurMax = nums[0], pos = 0, LeftMax = nums[0];for(int i = 0; i < n - 1; i++){CurMax = max(CurMax, nums[i]);if(LeftMax > nums[i]){pos = i;LeftMax = CurMax;}}return pos + 1;}
};

相关内容

热门资讯

货币政策工具加力支持 □ 本报记者 詹 超 【场景】 昆山开发区,苏州清陶动力科技有限公司车间的固态电池生产线嗡嗡作响,金...
我国继续实施更加积极的财政政策 经济日报北京12月28日讯(记者曾金华)记者从全国财政工作会议获悉,今年财政工作取得新成效,为推动完...
吴中区“三强化”促进法律服务业... 苏州市吴中区锚定“升级服务产业、优化营商环境、赋能高质量发展”核心目标,以政策为引领、平台为支撑、人...
央行:稳妥有序完善房地产信贷基... |2025年12月29日 星期一| NO.1 央行:稳妥有序完善房地产信贷基础性制度 12月26日,...
大金重工[002487]关于诉... 本版导读 2025-12-29 2025-12-29 2025-12-29 2025...
国务院国资委:完善国有资产管理... 国务院国资委党委书记、主任张玉卓在学习时报刊发文章《坚定不移做强做优做大国有企业和国有资本》。其中提...
“惠民政策落不到村”,紧抓!(... 本报记者 郑洋洋 “重点研究周武村党组织软弱涣散的问题,大家直奔主题,谈谈看法。”山西长治市潞城区店...
财政政策如何继续“更加积极” 记者从27日至28日举行的全国财政工作会议获悉:2026年要继续实施更加积极的财政政策,扩大财政支出...
落户政策居然考虑放开! 怎么,我能落户北京了? 大家好,我是孙少睡,这是我的第467篇楼市评论。 很多人的第一反应肯定是有没...
股市必读:ST泉为股东因涉嫌违... 截至2025年12月26日收盘,ST泉为(300716)报收于9.96元,下跌0.8%,换手率0.9...