给定一个 NxM 矩阵和一个乘积 K。任务是检查矩阵中是否存在具有给定乘积的对。
例子:
Input: mat[N][M] = {{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16}};
K = 42
Output: YES
Input: mat[N][M] = {{1, 2, 3, 4},
{5, 6, 7, 8}};
K = 150
Output: NO
方法:
- 取一个散列将矩阵的所有元素存储在散列中。
- 开始遍历矩阵,遍历时检查矩阵的当前元素是否可以被给定的乘积整除,当乘积K除以当前元素时,得到的被除数也存在于散列中。
那是,
(k % mat[i][j] == 0) && (mp[k / mat[i][j]] > 0)
- 如果存在,则返回 true,否则将当前元素插入到哈希中。
- 如果遍历矩阵的所有元素并且没有找到对,则返回 false。
下面是上述方法的实现:
C++
// CPP code to check for pair with given product
// exists in the matrix or not
#include
using namespace std;
#define N 4
#define M 4
// Function to check if a pair with given
// product exists in the matrix
bool isPairWithProductK(int mat[N][M], int k)
{
// hash to store elements
unordered_set s;
// looping through elements
// if present in the matrix
// return true, else push
// the element in matrix
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
if ((k % mat[i][j] == 0) && (s.find(k / mat[i][j]) != s.end())) {
return true;
}
else {
s.insert(mat[i][j]);
}
}
}
return false;
}
// Driver code
int main()
{
// Input matrix
int mat[N][M] = { { 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 },
{ 13, 14, 15, 16 } };
// given product
int k = 42;
if (isPairWithProductK(mat, k)) {
cout << "YES" << endl;
}
else
cout << "NO" << endl;
return 0;
}
Java
// Java code to check for pair with given product
// exists in the matrix or not
import java.util.*;
class GFG
{
static final int N=4;
static final int M=4;
// Function to check if a pair with given
// product exists in the matrix
static boolean isPairWithProductK(int mat[][], int k)
{
// hash to store elements
Set s=new HashSet();
// looping through elements
// if present in the matrix
// return true, else push
// the element in matrix
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
if ((k % mat[i][j] == 0) && s.contains(k / mat[i][j])) {
return true;
}
else {
s.add(mat[i][j]);
}
}
}
return false;
}
// Driver code
public static void main(String [] args)
{
// Input matrix
int mat[][] = { { 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 },
{ 13, 14, 15, 16 } };
// given product
int k = 42;
if (isPairWithProductK(mat, k)) {
System.out.println("YES");
}
else
System.out.println("NO");
}
// This code is contributed by ihritik
}
Python 3
# Python 3 code to check for pair with
# given product exists in the matrix or not
N = 4
M = 4
# Function to check if a pair with
# given product exists in the matrix
def isPairWithProductK(mat, k):
# hash to store elements
s = []
# looping through elements if present
# in the matrix return true, else push
# the element in matrix
for i in range(N) :
for j in range(M):
if ((k % mat[i][j] == 0) and
(k // mat[i][j]) in s):
return True
else :
s.append(mat[i][j])
return False
# Driver code
if __name__ == "__main__":
# Input matrix
mat = [[ 1, 2, 3, 4 ],
[ 5, 6, 7, 8 ],
[ 9, 10, 11, 12 ],
[ 13, 14, 15, 16 ]]
# given product
k = 42
if (isPairWithProductK(mat, k)):
print( "YES")
else:
print("NO")
# This code is contributed by ita_c
C#
// C# code to check for pair with given product
// exists in the matrix or not
using System;
using System.Collections.Generic;
class GFG
{
static readonly int N = 4;
static readonly int M = 4;
// Function to check if a pair with given
// product exists in the matrix
static bool isPairWithProductK(int [,]mat, int k)
{
// hash to store elements
HashSet s = new HashSet();
// looping through elements
// if present in the matrix
// return true, else push
// the element in matrix
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
if ((k % mat[i, j] == 0) &&
s.Contains(k / mat[i, j]))
{
return true;
}
else
{
s.Add(mat[i, j]);
}
}
}
return false;
}
// Driver code
public static void Main()
{
// Input matrix
int [,]mat = { { 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 },
{ 13, 14, 15, 16 } };
// given product
int k = 42;
if (isPairWithProductK(mat, k))
{
Console.WriteLine("YES");
}
else
Console.WriteLine("NO");
}
}
// This code has been contributed
// by PrinciRaj1992
Javascript
输出:
YES
时间复杂度:O(N*M)
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。