/* (C) 2024 YourCompanyName */ package two_pointers; /** * Created by gouthamvidyapradhan on 03/12/2017. * *
Given an array of n positive integers and a positive integer s, find the minimal length of a * contiguous subarray of which the sum ≥ s. If there isn't one, return 0 instead. * *
For example, given the array [2,3,1,2,4,3] and s = 7, the subarray [4,3] has the minimal * length under the problem constraint. * *
click to show more practice. * *
Credits: Special thanks to @Freezen for adding this problem and creating all test cases. * *
Solution: O(n) solution. Solve using sliding window sub-array sum using two pointers. */ public class MinimumSizeSubarraySum { /** * Main method * * @param args * @throws Exception */ public static void main(String[] args) throws Exception { int[] nums = {2, 3, 1, 2, 4, 3}; System.out.println(new MinimumSizeSubarraySum().minSubArrayLen(7, nums)); } public int minSubArrayLen(int s, int[] nums) { int sum = 0, count = 0, min = Integer.MAX_VALUE; for (int i = 0, j = 0; j < nums.length; ) { if (nums[j] >= s) { return 1; } else { sum += nums[j]; count++; if (sum >= s) { min = Math.min(min, count); while (j > i) { sum -= nums[i]; count--; i++; if (sum < s) break; min = Math.min(min, count); } } } j++; } if (min == Integer.MAX_VALUE) { return 0; } return min; } }