切割总数
给你一个由 N 个整数和一个整数 K 组成的数组 A,你的任务是计算你可以进行的剪切总数,使得每次剪切都满足以下两个条件
1. 一次切割将数组分成相等或不相等的两部分。
2. 左边最大元素与右边最小元素之和大于或等于 K。
例 1:
输入
N=3
K=3
A[]={1,2,3}
输出: 2
2
解释:
为满足上述条件,数组有两种划分方式:
{1} 和 {2,3} -> 1+2>=3(满足条件)
{1,2} 和 {3} -> 2+3>=3(满足条件)
例 2:
输入
N=5
K=5
A[]={1,2,3,4,5}
输出: 3
3
说明:{1,2}和{3,4,5
{1,2}和 {3,4,5} -> 2+3>=5
{1,2,3}和 {4,5} -> 3+4>=5
{1,2,3,4}和{5} -> 4+5>=5 -> 4+5>=5
您的任务
你不需要读取输入或打印任何内容。你的任务是完成函数 totalCuts(),它接受两个整数 N、K 和一个大小为 N 的数组 A 作为输入参数,并返回一个整数,表示满足两个条件的切割总数。
限制条件
1 <= N <= 10^6
0 <= K <= 10^9
0 <= A[i] <= 10^6
通过DeepL.com(免费版)翻译
----
第一个想法是用treemap来保存最小值,每次更新即可,但是会超时,所以就换成用数组来把保存,这样会快些。