对乘积小于k的排序数组中的对进行计数

给定一个排序整数数组和数字k,任务是对乘积小于x的数组中的对进行计数。 例如:

null

输入: A={2,3,5,6},k=16 输出: 4. 乘积小于16的对:(2,3)、(2,5)、(2,6)、(3,5) 输入: A={2,3,4,6,9},k=20 输出: 6. 乘积小于20的对:(2,3)、(2,4)、(2,6)、(2,9)、(3,4)、(3,6)

A. 简单解决方案 对于这个问题,运行两个循环来生成所有对,并逐个生成,检查当前对的乘积是否小于x。 一 有效解决方案 这个问题的关键是取l和r变量中索引的初始值和最后一个值。考虑以下两种情况:

  • 案例一: 让我们考虑i 类似地,A[i]*A[j-2]
  • 案例二: 让我们考虑i k,然后我们可以说,对于排序数组,[i] *[j+1]>k为[j+2]>a[j], 类似地,A[i]*A[j+2]>k,A[i]*A[j+3]>k…。。,A[i]*A[n-1]>k。

上述问题类似于 在排序数组中计数总和小于x的对 ,唯一不同的是求对的乘积,而不是求和。 下面是解决这个问题的算法:

1) Initialize two variables l and r to find the candidate    elements in the sorted array.       (a) l = 0       (b) r = n - 12) Initialize : result = 02) 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

下面是上述算法的实现:

C++

// 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 pairs
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 code
int 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

// Java program to find number
// of pairs with product less
// than k in a sorted array
class GFG
{
// Function to count the pairs
static 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 code
public 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

# 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 function
A = [ 2 , 3 , 4 , 6 , 9 ]
k = 20
print ( "Number of pairs with product less than " ,
k, " = " , fun(A, k))


C#

// C# program to find number
// of pairs with product less
// than k in a sorted array
using System;
class GFG
{
// Function to count the pairs
static 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 code
public 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
// PHP 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
$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 ) , "" ;
// This code is contributed by ajit
?>


Javascript

<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

时间复杂性: O(N)

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享