LeetCode 915. 分割数组
文章目录
- 1. 题目
- 2. 解题
1. 题目
给定一个数组 A,将其划分为两个不相交(没有公共元素)的连续子数组 left 和 right, 使得:
- left 中的每个元素都小于或等于 right 中的每个元素。
- left 和 right 都是非空的。
- left 要尽可能小。
在完成这样的分组后返回 left 的长度。可以保证存在这样的划分方法。
示例 1:
输入:[5,0,3,8,6]
输出:3
解释:left = [5,0,3],right = [8,6]示例 2:
输入:[1,1,1,0,6,12]
输出:4
解释:left = [1,1,1,0],right = [6,12]提示:
2 <= A.length <= 30000
0 <= A[i] <= 10^6
可以保证至少有一种方法能够按题目所描述的那样对 A 进行划分。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/partition-array-into-disjoint-intervals
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 用两个数组记录:左侧最大的,右侧最小的
- 遍历上面的数组,找到第一个位置,左侧最大的 <= 右侧最小的
class Solution {public:int partitionDisjoint(vector<int>& A) {int n = A.size(), MAX = INT_MIN, MIN = INT_MAX;vector<int> left_max(n), right_min(n);for(int i = 0; i < n; i++) {MAX = max(MAX, A[i]);left_max[i] = MAX;}for(int i = n-1; i >= 0; i--) {MIN = min(MIN, A[i]);right_min[i] = MIN;}for(int i = 0; i < n-1; i++){if(left_max[i] <= right_min[i+1])return i+1;}return -1;}
};
64 ms 21 MB
还有一次遍历的方法:
class Solution {public:int partitionDisjoint(vector<int>& A) {int n = A.size(), MAX = A[0], prev_MAX = A[0], pos = 0;for(int i = 0; i < n; i++) {MAX = max(MAX, A[i]);if(A[i] >= prev_MAX)//A[i] 比之前的最大值大,找到了分割点continue;// 上面的不成立,A[i] 要被分在左边pos = i;prev_MAX = MAX;}return pos+1;}
};
60 ms 19.8 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
LeetCode 915. 分割数组相关推荐
- LeetCode 659. 分割数组为连续子序列
LeetCode 659. 分割数组为连续子序列 回顾 根据题意,每个元素只会涉及两种情况: 已经存在nums[i]-1结尾的序列,我们把nums[i]接到之前的某个序列后. 尝试以nums[i]为头 ...
- leetcode 410. 分割数组的最大值(二分法)
1. 题目描述 给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组.设计一个算法使得这 m 个子数组各自和的最大值最小.注意: 数组长度 n 满足以下条件:1 ≤ n ≤ ...
- 915. 分割数组、剑指 Offer II 076. 数组中的第 k 大的数字
LeetCode题解 1.分割数组 2.数组中的第 k 大的数字 1.分割数组 题目描述: ➡️挑战链接⬅️ 分析: 首先题目叙述的很简单: 要求呢 1.左右两个区间元素必须连续 2.左右区间必须都有 ...
- LeetCode 410——分割数组的最大值
1. 题目 2. 解答 此题目为 今日头条 2018 AI Camp 5 月 26 日在线笔试编程题第二道--最小分割分数. class Solution {public:// 若分割数组的最大值为 ...
- LeetCode 659. 分割数组为连续子序列(哈希)
文章目录 1. 题目 2. 解题 1. 题目 给你一个按升序排序的整数数组 num(可能包含重复数字),请你将它们分割成一个或多个子序列,其中每个子序列都由连续整数组成且长度至少为 3 . 如果可以完 ...
- LeetCode 410. 分割数组的最大值(极小极大化 二分查找 / DP)
文章目录 1. 题目 2. 解题 2.1 二分查找 2.2 DP 1. 题目 给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组. 设计一个算法使得这 m 个子数组各自和 ...
- Leetcode 410.分割数组的最大值(最优解是二分法)
Time: 20190904 Type: Hard, DP 题目描述 给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组.设计一个算法使得这 m 个子数组各自和的最大值最 ...
- leetcode 659. 分割数组为连续子序列(贪心算法)
给你一个按升序排序的整数数组 num(可能包含重复数字),请你将它们分割成一个或多个子序列,其中每个子序列都由连续整数组成且长度至少为 3 . 如果可以完成上述分割,则返回 true :否则,返回 f ...
- LeetCode 410. 分割数组的最大值
题目描述: 给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组.设计一个算法使得这 m 个子数组各自和的最大值最小. 注意: 数组长度 n 满足以下条件: 1 ≤ n ≤ ...
最新文章
- linux c 函数专挑,Linux C wait函数
- 奖励名单表格模板_员工出勤工薪记算表(行政人事模板)
- Web前端如何学?Web前端学习方法分享
- 洛谷 一种堆套路 P1631序列合并、P2085最小函数值
- rails_Rails应用程序必备的宝石
- Django 文件上传与下载的相关问题
- Oracle dbms_job管理
- 数据结构——树状数组
- java多线程学习系列
- 190527每日一句,励志| 为了成功,约束自己;有时候“再等等”,就再也等不到了
- 用mysql搭建蚂蚁笔记_利用蚂蚁笔记搭建个人云笔记/博客
- 【神经网络】LSTM理论介绍
- 模仿百度“您要找的是不是:”提示功能
- 一万字一篇文20分钟学会C语言和Python,十四年编程经验老鸟传授经验之道
- Web——P2P应用
- 本科科研经历(技术干货篇-论文发表流程)
- Big-man进军Linux系统(一)
- bzoj 5248: [2018多省省队联测]一双木棋 博弈论+状压dp
- Spring Security 参考手册(一)
- HBase分享 | Flink+HBase场景化解决方案