Partition Array into Disjoint Intervals LT915
Given an array A, partition it into two (contiguous) subarrays left and right so that:
- Every element in
leftis less than or equal to every element inright. leftandrightare non-empty.lefthas the smallest possible size.
Return the length of left after such a partitioning. It is guaranteed that such a partitioning exists.
Example 1:
Input: [5,0,3,8,6]
Output: 3
Explanation: left = [5,0,3], right = [8,6]
Example 2:
Input: [1,1,1,0,6,12]
Output: 4
Explanation: left = [1,1,1,0], right = [6,12]
Note:
2 <= A.length <= 300000 <= A[i] <= 10^6- It is guaranteed there is at least one way to partition
Aas described.
Idea 1. max(nums[0]... nums[i]) <= min(nums[i+1],..nums[n-1]), build maxArray from left, minArray from right
Time comlexity: T(n)
Space complexity: T(n)
using index:
class Solution {
public int partitionDisjoint(int[] A) {
int[] maxIndex = new int[A.length];
for(int i = 1; i < A.length; ++i) {
if(A[i] > A[maxIndex[i-1]]) {
maxIndex[i] = i;
}
else {
maxIndex[i] = maxIndex[i-1];
}
}
int[] minIndex = new int[A.length];
minIndex[A.length-1] = A.length-1;
for(int i = A.length-2; i >= 0; --i) {
if(A[i] < A[minIndex[i+1]]) {
minIndex[i] = i;
}
else {
minIndex[i] = minIndex[i+1];
}
}
for(int i = 0; i < A.length-1; ++i) {
if(A[maxIndex[i]] <= A[minIndex[i+1]]) {
return i + 1;
}
}
return 0;
}
}
No need to use index
class Solution {
public int partitionDisjoint(int[] A) {
int[] maxFromLeft = new int[A.length];
maxFromLeft[0] = A[0];
for(int i = 1; i < A.length; ++i) {
maxFromLeft[i] = Math.max(maxFromLeft[i-1], A[i]);
}
int[] minFromRight = new int[A.length];
minFromRight[A.length-1] = A[A.length-1];
for(int i = A.length-2; i >= 0; --i) {
minFromRight[i] = Math.min(minFromRight[i+1], A[i]);
}
for(int i = 0; i < A.length-1; ++i) {
if(maxFromLeft[i] <= minFromRight[i+1]) {
return i + 1;
}
}
return 0;
}
}
Idea 2. 从讨论里看到的妙解,只需要保持2个变量,localMax记录有效partition里的最大值, maxSoFar记录遍历至今的最大值,nums[0]...nums[paritionIndex] (localMax) | [nums[partitonIndex]...nums[i-1]| (maxSoFar), 遍历到一个数nums[i],
paritionIndex 不变 if nums[i] >= localMax
paritionIndex = i, 需要包括nums[i], localMax也需要更新至maxSoFar
Time complexity: O(n)
Space complexity: O(1)
class Solution {
public int partitionDisjoint(int[] A) {
int localMax = A[0];
int maxSoFar = A[0];
int partitionIndex = 0;
for(int i = 1; i < A.length; ++i) {
if(A[i] < localMax) {
partitionIndex = i;
localMax = maxSoFar;
}
maxSoFar = Math.max(maxSoFar, A[i]);
}
return partitionIndex + 1;
}
}
Partition Array into Disjoint Intervals LT915的更多相关文章
- 【LeetCode】915. Partition Array into Disjoint Intervals 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/partitio ...
- [Swift]LeetCode915.将分区数组分成不相交的间隔 | Partition Array into Disjoint Intervals
Given an array A, partition it into two (contiguous) subarrays left and right so that: Every element ...
- [LeetCode] 915. Partition Array into Disjoint Intervals 分割数组为不相交的区间
Given an array A, partition it into two (contiguous) subarrays left and right so that: Every element ...
- 【leetcode】915. Partition Array into Disjoint Intervals
题目如下: 解题思路:题目要求的是在数组中找到一个下标最小的index,使得index左边(包括自己)子序列的最大值小于或者等于右边序列的最小值.那么我们可以先把数组从最左边开始到数组最右边所有子序列 ...
- Partition Array into Disjoint Intervals
2020-02-10 22:16:50 问题描述: 问题求解: 解法一:MultiSet O(nlog) 看了下数据规模,第一个想到的是multiset,肯定可以ac的,就直接敲了出来. public ...
- [leetcode-915-Partition Array into Disjoint Intervals]
Given an array A, partition it into two (contiguous) subarrays left and right so that: Every element ...
- Max coverage disjoint intervals
Assume you have k<=10^5 intervals [a_i, b_i] \in [1,10^18] (some of them may overlap), and you ne ...
- [LeetCode] Data Stream as Disjoint Intervals 分离区间的数据流
Given a data stream input of non-negative integers a1, a2, ..., an, ..., summarize the numbers seen ...
- Leetcode: Data Stream as Disjoint Intervals && Summary of TreeMap
Given a data stream input of non-negative integers a1, a2, ..., an, ..., summarize the numbers seen ...
随机推荐
- C专家编程
[C专家编程] 1.如果写了这样一条语句: if(3=i).那么编程器会发出“attempted assignment to literal(试图向常数赋值)”的错误信息. 所以将常量放置在==前央, ...
- msf客户端渗透(六):抓包、搜索文件、破解弱口令、修改MACE时间
嗅探抓包 查看网卡 指定网卡,因为资源有限,默认抓满50000个包如果不dump下来,就会自动销毁掉,从0开始抓. dump嗅探到的文件到本机,传递到本机的过程是结果ssl加密的 dump了两个文件 ...
- JMeter学习(十七)JMeter测试MongoDB(转载)
转载自 http://www.cnblogs.com/yangxia-test JMeter测试MongoDB性能有两种方式,一种是利用JMeter直接进行测试MongoDB,还有一种是写Java代码 ...
- hibench 对CDH5.13.1进行基准测试(测试项目hadoop\spark\)HDFS作HA高可靠性
使用CDH 5.13.1部署了HADOOP集群之后,需要进行基准性能测试. 一.hibench 安装 1.安装位置要求. 因为是全量安装,其中有SPARK的测试(SPARK2.0). 安装位置在SPA ...
- eclipse启动tomcat后,无法通过路径访问项目
eclipse已启动,访问localhost:8080也出现了tomcat页面,但是无法通过项目路径去访问项目,解决办法: 在控制台区域打开tomcat server,默认是第一项,且无法修改: 先把 ...
- 微信小程序开发——setData的使用技巧
前言: 之前使用 setData,一直都是作为给变量赋值,感觉比起vue给data中的变量的赋值还是有点麻烦的. 最近项目不太紧张,为了提高小程序的开发效率及提升小程序开发的能力,又重新的通读了下小程 ...
- 【Linux 进程】exec族函数详解
exec族的组成: 在Linux中,并不存在一个exec()的函数形式,exec指的是一组函数,一共有6个,分别是: #include <unistd.h> extern char **e ...
- Java构建指定大小文件
Java快速创建指定大小的文件,最多的解决办法就是循环向文件里面入固定大小的空字节,但是这种方式构建大文件性能比较低下,因此有这样两种方式可供参考: Java有一个类:FileChannel,查阅AP ...
- PullToRefreshView的样式以及一些问题
首先说 PulltorefreshListView PullToRefreshGridView PullToRefreshWebView PullToRefreshScrollView Pull ...
- 使用SQL语句创建数据库2——创建多个数据库文件和多个日志文件
在matser数据库下新建查询,输入的命令如下: USE master GOCREATE DATABASE E_MarketON PRIMARY--主文件组( NAME ='E_Market_data ...