Skip to content

Files

Latest commit

bd92a69 · Nov 27, 2018

History

History

0915.Partition Array into Disjoint Intervals

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Nov 27, 2018
Nov 27, 2018

分割数组

问题描述

给定一个数组 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 进行划分。

解法

从左到右遍历数组,维持三个标志,即left的结束位置loc、left中最大的值vmx、数组的第0位与访问位置之间最大的值mx。每次访问一个位置,若其值大于mx,则应将其值赋予mx,若其值小于vmx,则应将其位置赋予loc、将mx赋予vmx

class Solution:
    def partitionDisjoint(self, A):
        loc = 0
        vmx = A[0]
        mx = A[0]
        for i, el in enumerate(A):
            if el > mx:
                mx = el
            if el < vmx:
                loc = i
                vmx = mx
        return loc + 1