korayucar
6/11/2016 - 10:32 PM

Given an unsorted array of non-negative integers, find a continous subarray which adds to a given number.

Given an unsorted array of non-negative integers, find a continous subarray which adds to a given number.

import java.util.Scanner;

class Library {
    public static void main (String[] args) {
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
        for(int i = 0 ; i < T ; i ++)
        {
            int N = sc.nextInt();
            int S = sc.nextInt();
            int [] numbers = new int[N];
            for(int j = 0 ; j < N ; j ++)
            {
                numbers[j] = sc.nextInt();
            }
            int start = 0 ;
            int end =0;
            int sum =numbers[0] ;
            boolean found = false;
            for(int j = 1 ; j < N ; )
            {
                if(sum < S)
                {
                    sum +=numbers[j];
                    end=j;
                    if(sum==S)
                    {
                        System.out.println( (start+1)+ " " + (end+1));
                        found = true;
                        break;
                    }
                    j++;
                }
                else if(sum > S)
                {
                    sum-= numbers[start];
                    start++;
                }
                else
                {
                    System.out.println( (start+1)+ " " + (end+1));
                    found = true;
                    break;
                    
                }
            }
            if(!found)
                System.out.println(-1);
            
        }
    }
}