给定大小为N的整数的数组arr [] ,任务是在给定数组中找到最接近的对,以使一个元素是另一个元素的倍数。如果不存在这样的对,则打印-1 。
注意:最接近的对意味着任何两个元素的索引之间的差必须最小。
例子:
Input: arr[] = {2, 3, 4, 5, 6}
Output: 2 4
Explanation:
The only possible pairs are (2, 4), (2, 6), (3, 6) out of which the pair which have minimum distance between them is (2, 4).
Input: arr[] = { 2, 3, 6, 4, 5 }
Output: 3 6
Explanation:
The only possible pairs are (2, 4), (2, 6), (3, 6) out of which the pair which have minimum distance between them is (3, 6).
方法:想法是生成给定数组的所有可能的对,并检查数组中是否存在一对元素(如果一个元素是其他元素的倍数),并使用当前对更新所需的最小距离。经过上述操作打印后,该对之间的距离最小,一个是另一个的倍数。如果不存在这样的对,则打印-1 。
下面是上述方法的实现:
C++
// C++ program for the above approach
#include
using namespace std;
// Function to find the minimum
// distance pair where one is the
// multiple of the other
void findPair(int a[], int n)
{
// Initialize the variables
int min_dist = INT_MAX;
int index_a = -1, index_b = -1;
// Iterate for all the elements
for (int i = 0; i < n; i++)
{
// Loop to make pairs
for (int j = i + 1; j < n; j++)
{
// Check for minimum distance
if (j - i < min_dist)
{
// Check if one is a
// multiple of other
if (a[i] % a[j] == 0 || a[j] % a[i] == 0)
{
// Update the distance
min_dist = j - i;
// Store indexes
index_a = i;
index_b = j;
}
}
}
}
// If no such pair exists
if (index_a == -1)
{
cout << ("-1");
}
// Print the answer
else
{
cout << "(" << a[index_a]
<< ", " << a[index_b] << ")";
}
}
// Driver Code
int main()
{
// Given array arr[]
int a[] = { 2, 3, 4, 5, 6 };
int n = sizeof(a)/sizeof(int);
// Function Call
findPair(a, n);
}
// This code is contributed by rock_cool
Java
// Java program for the above approach
import java.util.*;
class GFG {
// Function to find the minimum
// distance pair where one is the
// multiple of the other
public static void
findPair(int a[], int n)
{
// Initialize the variables
int min_dist = Integer.MAX_VALUE;
int index_a = -1, index_b = -1;
// Iterate for all the elements
for (int i = 0; i < n; i++) {
// Loop to make pairs
for (int j = i + 1; j < n; j++) {
// Check for minimum distance
if (j - i < min_dist) {
// Check if one is a
// multiple of other
if (a[i] % a[j] == 0
|| a[j] % a[i] == 0) {
// Update the distance
min_dist = j - i;
// Store indexes
index_a = i;
index_b = j;
}
}
}
}
// If no such pair exists
if (index_a == -1) {
System.out.println("-1");
}
// Print the answer
else {
System.out.print(
"(" + a[index_a]
+ ", "
+ a[index_b] + ")");
}
}
// Driver Code
public static void
main(String[] args)
{
// Given array arr[]
int a[] = { 2, 3, 4, 5, 6 };
int n = a.length;
// Function Call
findPair(a, n);
}
}
Python3
# Python3 program for the above approach
import sys
# Function to find the minimum
# distance pair where one is the
# multiple of the other
def findPair(a, n):
# Initialize the variables
min_dist = sys.maxsize
index_a = -1
index_b = -1
# Iterate for all the elements
for i in range(n):
# Loop to make pairs
for j in range(i + 1, n):
# Check for minimum distance
if (j - i < min_dist):
# Check if one is a
# multiple of other
if ((a[i] % a[j] == 0) or
(a[j] % a[i] == 0)):
# Update the distance
min_dist = j - i
# Store indexes
index_a = i
index_b = j
# If no such pair exists
if (index_a == -1):
print("-1")
# Print the answer
else:
print("(", a[index_a],
", ", a[index_b], ")")
# Driver Code
# Given array arr[]
a = [ 2, 3, 4, 5, 6 ]
n = len(a)
# Function call
findPair(a, n)
# This code is contributed by sanjoy_62
C#
// C# program for the above approach
using System;
class GFG{
// Function to find the minimum
// distance pair where one is the
// multiple of the other
public static void findPair(int []a, int n)
{
// Initialize the variables
int min_dist = int.MaxValue;
int index_a = -1, index_b = -1;
// Iterate for all the elements
for(int i = 0; i < n; i++)
{
// Loop to make pairs
for(int j = i + 1; j < n; j++)
{
// Check for minimum distance
if (j - i < min_dist)
{
// Check if one is a
// multiple of other
if (a[i] % a[j] == 0 ||
a[j] % a[i] == 0)
{
// Update the distance
min_dist = j - i;
// Store indexes
index_a = i;
index_b = j;
}
}
}
}
// If no such pair exists
if (index_a == -1)
{
Console.WriteLine("-1");
}
// Print the answer
else
{
Console.Write("(" + a[index_a] +
", " + a[index_b] + ")");
}
}
// Driver Code
public static void Main(String[] args)
{
// Given array []arr
int []a = { 2, 3, 4, 5, 6 };
int n = a.Length;
// Function Call
findPair(a, n);
}
}
// This code is contributed by 29AjayKumar
Javascript
输出:
(2, 4)
时间复杂度: O(N 2 )
辅助空间: O(1)