LeetCode 862. 和至少为 K 的最短子数组
最近在刷LeetCode,随便写点备忘巩固一下。
题目
返回 A 的最短的非空连续子数组的长度,该子数组的和至少为 K 。
如果没有和至少为 K 的非空子数组,返回 -1 。
示例 1:
输入:A = [1], K = 1
输出:1
示例 2:
输入:A = [1,2], K = 4
输出:-1
示例 3:
输入:A = [2,-1,2], K = 3
输出:3
提示:
1.1 <= A.length <= 50000
2.-10 ^ 5 <= A[i] <= 10 ^ 5
3.1 <= K <= 10 ^ 9
解法1
直接想到一个题,求最大子数组和,在算法优化后可以在O(n)时间内完成.这题稍微有些变化,但是有一点点像.假设对每一个数组中的,计算以它开始子数组和,一旦满足后就与当前最短对比,后续就不用算了.
class Solution {
public int shortestSubarray(int[] A, int K) {
int size = A.length;
int ans = size + 1;