- [Leetcode 3698. Split Array With Minimum Difference](#Leetcode 3698. Split Array With Minimum Difference)
- [1. 解题思路](#1. 解题思路)
- [2. 代码实现](#2. 代码实现)
1. 解题思路
这一题思路上就是一个分类讨论。
要想要分成左右两个递增和递减数列,我们首先需要从左往右以及从右往左分别考察最长的递增以及递减序列的长度。
如果两者无法组成完整的数组,那么必然不可分,否则则有两种情况。一种情况是两者没有交叉,此时只有一种分法,直接返回结果即可;第二种情况就是两者共享一个最大的元素,此时有两种分法,我们分别求出其结果然后返回最大值即可。
2. 代码实现
给出python代码实现如下:
python
class Solution:
def splitArray(self, nums: List[int]) -> int:
n = len(nums)
l = 0
while l < n-1 and nums[l] < nums[l+1]:
l += 1
r = n-1
while r > 0 and nums[r] < nums[r-1]:
r -= 1
if r-l > 1:
return -1
elif r-l == 1:
return abs(sum(nums[:r]) - sum(nums[r:]))
else:
return min(abs(sum(nums[:r]) - sum(nums[r:])), abs(sum(nums[:r+1]) - sum(nums[r+1:])))
提交代码评测得到:耗时73ms,占用内存30.68MB。