Rahul And Minimum Subarray in java

Rahul And Minimum Subarray in java

Rahul is a programming enthusiast. He is currently learning about arrays/lists. One day his teacher asked him to solve a very difficult problem.

The problem was to find the length of the smallest subarray(subarray is a contiguous part of an array/list) from the given array/list ARR of size N with its sum greater than a given value X. If there is no such possible subarray return 0.

Example:

Given an ARR: [1, 2, 21, 7, 6, 12] and a number X: 23.

The length of the smallest subarray is 2 as the subarray is [21, 7].

Note: Here are multiple subarrays whose sum is greater than X such as [1, 2, 21] or [7, 6, 12] but we have to choose the minimum length subarray.

Input Format:

The first line will contain two integers N and X that denote the size of the ARR and the minimum value of the substring to be created from the array ARR respectively.

The second linecontains N space-separated integers ARR[i], the elements of array ARR.

Output Format:

Return an integer denoting the length of the minimum subarray whose sum is greater than X.

Example 1:

Input:

5 11
9 1 5 3 9

Output:

2

Explanation:

The length of the minimum subarray is 2. The subarray is [3, 9] as the sum is 12 which is greater than the given value 11.

Example 2:

Input:

4 8
5 1 2 1

Output:

4

Explanation:

The length of the minimum subarray is 4. The subarray is [5,1, 2, 1] as the sum is 9 which is greater than the given value 8.

Constraints:

1 <= N <= 10^3

1 <= X <= 10^9

0 <= A[i] <= 10^9

Solution of Rahul And Minimum Subarray in java:–

import java.util.*;
import java.lang.*;
import java.io.*;

public class Main
{
	public static void main (String[] args) throws java.lang.Exception
	{
		//your code here
                Scanner sc = new Scanner(System.in);
                int n = sc.nextInt();
                int x = sc.nextInt();
                int A[] = new int[n];
                for(int i=0;i<n;i++){
                        A[i] = sc.nextInt();
                }
                int sum = 0;
                int ans = (int)1e9;
                int i = 0, j= 0;
                while(j<n){
                        sum += A[j];
                        while(sum>x && i<=j){
                                ans = Math.min(ans, j-i+1);
                                sum -= A[i];
                                i++;
                        }
                        j++;
                }
                if(ans==(int)1e9)ans = 0;
                System.out.println(ans);

	}
}
Tags: No tags

Add a Comment

Your email address will not be published. Required fields are marked *