class Solution { public int minSubArrayLen(int target, int[] nums) { int n = nums.length; long[] s = new long[n + 1]; for (int i = 0; i < n; ++i) { s[i + 1] = s[i] + nums[i]; } int ans = n + 1; for (int i = 0; i <= n; ++i) { int j = search(s, s[i] + target); if (j <= n) { ans = Math.min(ans, j - i); } } return ans <= n ? ans : 0; } private int search(long[] nums, long x) { int l = 0, r = nums.length; while (l < r) { int mid = (l + r) >> 1; if (nums[mid] >= x) { r = mid; } else { l = mid + 1; } } return l; } }