Thursday, 14 February 2019

Check a triplet that sum is given value

Given an array A[] of N numbers and another number x, determine whether or not there exist three elements in A[] whose sum is exactly x.
Input:
First line of input contains number of testcases T. For each testcase, first line of input contains n and x. Next line contains array elements.
Output:
Print 1 if there exist three elements in A whose sum is exactly x, else 0.
Constraints:
1 ≤ T ≤ 100
1 ≤ N ≤ 103
1 ≤ A[i] ≤ 105
Example:
Input:
2
6 13
1 4 45 6 10 8
5 10
1 2 4 3 6
Output:
1
1
Explanation:
Testcase 1:
 There is one triplet with sum 13 in the array. Triplet elements are 1, 4, 8, whose sum is 13.


Solution 1:(Brute-Force or Simple Method) in O(n^3)

import java.lang.*;
import java.io.*;
class Sushil
 {
     static int getCount(int a[],int x)
     {
         Arrays.sort(a);
         int n=a.length;
         for(int i=0;i<n;i++)
         {
             for(int j=i+1;j<n;j++)
             {
                 for(int k=j+1;k<n;k++)
                 {
                     if((a[i]+a[j]+a[k])==x)
                         return 1;
                 }
             }
         }
               return 0;
     }
    public static void main (String[] args)
     {
         Scanner sc=new Scanner(System.in);
         int t=sc.nextInt();
         while(t-->0)
         {
             int n=sc.nextInt();
             int x=sc.nextInt();
             int a[]=new int[n];
             for(int i=0;i<n;i++)
               a[i]=sc.nextInt();
           System.out.println(getCount(a,x));   
         }
        
   
     }
}


Solution 2:(Sorting Technique) in O(n^2)

 import java.lang.*;
import java.io.*;
class Sushil
 {
     static int getCount(int a[],int x)
     {
       
         Arrays.sort(a);
         int n=a.length;
         for(int i=0;i<n-2;i++)
         {
             int l=i+1;
             int r=n-1;
             while(l<r)
             {
                 if(a[i]+a[l]+a[r]==x)
                   return 1;
                 if(a[i]+a[l]+a[r]<x)
                    l++;
                  else
                   r--;
             }
         }
         return 0;
     }
    public static void main (String[] args)
     {
         Scanner sc=new Scanner(System.in);
         int t=sc.nextInt();
         while(t-->0)
         {
             int n=sc.nextInt();
             int x=sc.nextInt();
             int a[]=new int[n];
             for(int i=0;i<n;i++)
               a[i]=sc.nextInt();
           System.out.println(getCount(a,x));  
         }
       
    
     }
}

No comments:

Post a Comment