Count pairs in a sorted array whose product is less than k - GeeksforGeeks

06 May, 2021
Given a sorted integer array and number k, the task is to count pairs in an array whose product is less than x.Examples: 
Input: A = {2, 3, 5, 6}, k = 16 Output: 4 Pairs having product less than 16: (2, 3), (2, 5), (2, 6), (3, 5)Input: A = {2, 3, 4, 6, 9}, k = 20 Output: 6 Pairs having product less than 20: (2, 3), (2, 4), (2, 6), (2, 9), (3, 4), (3, 6)  
 
A simple solution of this problem run two loops to generate all pairs and one by one and check if current pair’s product is less than x or not.An Efficient solution of this problem is take initial and last value of index in l and r variable. Consider below two cases: 
Case-I: Lets consider i < j and A[i]*A[j] < k then we can say that A[i]*A[j-1] < k as A[j-1] < A[j] for a sorted array, Similarly A[i]*A[j-2] < k, A[i]*A[j-3] < k, ....., A[i]*A[i+1] < k.
Case-II: Lets consider i k then we can say that A[i]*A[j+1] > k as A[j+1] > A[j] for a sorted array, similarly A[i]*A[j+2] > k, A[i]*A[j+3] > k, ....., A[i]*A[n-1] > k.
Above problem is similar to Count pairs in a sorted array whose sum is less than x, the only thing that is different is to find the product of pairs instead of sum. Below is the algorithm to solve this problem:  
1) Initialize two variables l and r to find the candidate 
   elements in the sorted array.
       (a) l = 0
       (b) r = n - 1
2) Initialize : result = 0
2) Loop while l < r.

    // If current left and current
    // right have product smaller than x,
    // the all elements from l+1 to r
    // form a pair with current
    (a) If (arr[l] * arr[r] < x)  
          result = result + (r - l)    
          l++;  
   
    (b) Else
            r--;
       
3) Return result
Below is the implementation of above algorithm:  
C++
Java
Python
C#
PHP
Javascript
// C++ program to find number of pairs with// product less than k in a sorted array#include <bits/stdc++.h>using namespace std; // Function to count the pairsint fun(int A[], int n, int k){    // count to keep count of    // number of pairs with product    // less than k    int count = 0;    int i = 0;    int j = n - 1;     // Traverse the array    while (i < j) {         // If product is less than k        // then count that pair        // and increment 'i'        if (A[i] * A[j] < k) {            count += (j - i);            i++;        }         // Else decrement 'j'        else {            j--;        }    }     // Return count of pairs    return count;} // Driver codeint main(){     int A[] = { 2, 3, 4, 6, 9 };    int n = sizeof(A) / sizeof(int);    int k = 20;    cout << "Number of pairs with product less than "         << k << " = " << fun(A, n, k) << endl;     return 0;}
// Java program to find number// of pairs with product less// than k in a sorted arrayclass GFG{ // Function to count the pairsstatic int fun(int A[],               int n, int k){    // count to keep count of    // number of pairs with    // product less than k    int count = 0;    int i = 0;    int j = n - 1;     // Traverse the array    while (i < j)    {         // If product is less than        // k then count that pair        // and increment 'i'        if (A[i] * A[j] < k)        {            count += (j - i);            i++;        }         // Else decrement 'j'        else        {            j--;        }    }     // Return count of pairs    return count;} // Driver codepublic static void main(String args[]){    int A[] = {2, 3, 4, 6, 9};    int n = A.length;    int k = 20;         System.out.println("Number of pairs with " +                     "product less than 20 = " +                                  fun(A, n, k));}} // This code is contributed// by Kirti_Mangal
# Python program to find number of pairs with# product less than k in a sorted array def fun(A, k):    # count to keep count of number    # of pairs with product less than k    count = 0    n = len(A)    # Left pointer pointing to leftmost part    i = 0         # Right pointer pointing to rightmost part    j = n-1         # While left and right pointer don't meet    while i < j:        if A[i]*A[j] < k:            count += (j-i)            # Increment the left pointer            i+= 1        else:            # Decrement the right pointer            j-= 1    return count # Driver code to test above functionA = [2, 3, 4, 6, 9]k = 20print("Number of pairs with product less than ",k, " = ", fun(A, k))
// C# program to find number// of pairs with product less// than k in a sorted arrayusing System; class GFG{ // Function to count the pairsstatic int fun(int []A,               int n, int k){    // count to keep count of    // number of pairs with    // product less than k    int count = 0;    int i = 0;    int j = n - 1;     // Traverse the array    while (i < j)    {         // If product is less than        // k then count that pair        // and increment 'i'        if (A[i] * A[j] < k)        {            count += (j - i);            i++;        }         // Else decrement 'j'        else        {            j--;        }    }     // Return count of pairs    return count;} // Driver codepublic static void Main(){    int []A = {2, 3, 4, 6, 9};    int n = A.Length;    int k = 20;         Console.WriteLine("Number of pairs with " +                    "product less than 20 = " +                                 fun(A, n, k));}} // This code is contributed// by Subhadeep
<?php// PHP program to find number of// pairs with product less than k// in a sorted array // Function to count the pairsfunction fun($A, $n, $k){    // count to keep count of    // number of pairs with product    // less than k    $count = 0;    $i = 0;    $j = ($n - 1);     // Traverse the array    while ($i < $j)    {         // If product is less than k        // then count that pair        // and increment 'i'        if ($A[$i] * $A[$j] < $k)        {            $count += ($j - $i);            $i++;        }         // Else decrement 'j'        else        {            $j--;        }    }     // Return count of pairs    return $count;} // Driver code$A = array( 2, 3, 4, 6, 9 );$n = sizeof($A);$k = 20;echo "Number of pairs with product less than ",           $k , " = " , fun($A, $n, $k) , "\n"; // This code is contributed by ajit?>
<script>     // Javascript program to find number    // of pairs with product less    // than k in a sorted array         // Function to count the pairs    function fun(A, n, k)    {        // count to keep count of        // number of pairs with        // product less than k        let count = 0;        let i = 0;        let j = n - 1;         // Traverse the array        while (i < j)        {             // If product is less than            // k then count that pair            // and increment 'i'            if (A[i] * A[j] < k)            {                count += (j - i);                i++;            }             // Else decrement 'j'            else            {                j--;            }        }         // Return count of pairs        return count;    }         let A = [2, 3, 4, 6, 9];    let n = A.length;    let k = 20;           document.write("Number of pairs with " +                    "product less than 20 = " +                                 fun(A, n, k));                                  </script>
Number of pairs with product less than 20 = 6
 
Time Complexity: O(N)  
Kirti_Mangal
tufan_gupta2000
jit_t
divyesh072019
two-pointer-algorithm
Arrays
two-pointer-algorithm
Arrays
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Maximum and minimum of an array using minimum number of comparisons
Stack Data Structure (Introduction and Program)
Top 50 Array Coding Problems for Interviews
Multidimensional Arrays in Java
Introduction to Arrays
Linear Search
Python | Using 2D arrays/lists the right way
Linked List vs Array
Queue | Set 1 (Introduction and Array Implementation)
Find the Missing Number