Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- public int minSubArrayLen(int target, int[] nums) {
- int len = nums.length;
- int ans = Integer.MAX_VALUE;
- int[] sums = new int[nums.length+1];
- sums[0] = 0;
- for(int i = 1; i <= len; i++) {
- sums[i] = sums[i-1] + nums[i-1];
- }
- // System.out.println(" 0, 1, 2, 3, 4, 5 ");
- // System.out.println(Arrays.toString(sums));
- for(int i = 1; i <= len; i++) {
- // O(n)
- // for(int j = i; j < len; j++) {
- // int sum = 0;
- // if(i == 0) {
- // sum = sums[j];
- // }else{
- // sum = sums[j] - sums[i-1];
- // }
- // if(sum >= target) {
- // // System.out.println(i + "-->" + j);
- // ans = Math.min(ans, (j-i+1));
- // break;
- // }
- // }
- // O(logn)
- int start = i, end = sums.length-1, mid = -1, currSum = -1;
- while(start <= end) {
- // System.out.println(start + " " + end);
- mid = (start + end) / 2;
- // System.out.println(mid);
- currSum = sums[mid] - sums[i-1];
- // System.out.println(currSum);
- if(currSum >= target) {
- ans = Math.min(ans, mid - (i - 1));
- // System.out.println(ans);
- end = mid - 1;
- }else if(currSum < target) {
- start = mid + 1;
- }
- }
- }
- return ans != Integer.MAX_VALUE ? ans : 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement