Friday 6 March 2020

Program - Given an array A[] and a number x, check for pair in A[] with sum as x

hasArrayTwoCandidates (A[], ar_size, sum)
1) Sort the array in non-decreasing order.
2) Initialize two index variables to find the candidate 
   elements in the sorted array.
       (a) Initialize first to the leftmost index: l = 0
       (b) Initialize second  the rightmost index:  r = ar_size-1
3) Loop while l < r.
       (a) If (A[l] + A[r] == sum)  then return 1
       (b) Else if( A[l] + A[r] <  sum )  then l++
       (c) Else r--    
4) No candidates in whole array - return 0
// Java program to check if given array 
// has 2 elements whose sum is equal 
// to the given value 
import java.util.*; 

class GFG { 
 // Function to check if array has 2 elements 
 // whose sum is equal to the given value 
 static boolean hasArrayTwoCandidates(int A[], 
          int arr_size, int sum) 
 { 
  int l, r; 

  /* Sort the elements */
  Arrays.sort(A); 

  /* Now look for the two candidates 
  in the sorted array*/
  l = 0; 
  r = arr_size - 1; 
  while (l < r) { 
   if (A[l] + A[r] == sum) 
    return true; 
   else if (A[l] + A[r] < sum) 
    l++; 
   else // A[i] + A[j] > sum 
    r--; 
  } 
  return false; 
 } 

 // Driver code 
 public static void main(String args[]) 
 { 
  int A[] = { 1, 4, 45, 6, 10, -8 }; 
  int n = 16; 
  int arr_size = A.length; 

  // Function calling 
  if (hasArrayTwoCandidates(A, arr_size, n)) 
   System.out.println("Array has two "
       + "elements with given sum"); 
  else
   System.out.println("Array doesn't have "
       + "two elements with given sum"); 
 } 
}