给定两个大小为N 的数组a[]和b[] ,任务是通过执行a[i] – b[i]打印使数组a[i] 的所有元素等于其最小元素所需的操作计数]其中总是a[i] >= b[i] 。如果不可能,则返回-1。
例子:
Input: a[] = {5, 7, 10, 5, 15} b[] = {2, 2, 1, 3, 5}
Output: 8
Explanation:
Input array is a[] = 5, 7, 10, 5, 15 and b[] = 2, 2, 1, 3, 5. The minimum from a[] is 5.
Now for a[0] we don’t have to perform any operation since its already 5.
For i = 1, a[1] – b[1] = 7 – 2 = 5. (1 operation)
For i = 2, a[2] – b[2] = 10 – 1 = 9 – 1 = 8 – 1 = 7 – 1 = 6 – 1 = 5 (5 operation)
For i = 3, a[3] = 5
For i = 4, a[4] – b[4] = 15 – 5= 10 – 5 = 5 (2 operation)
The total number of operations required is 8.
Input: a[] = {1, 3, 2} b[] = {2, 3, 2}
Output:-1
Explanation:
It is not possible to convert the array a[] into equal elements.
方法:解决上述问题,请按照以下步骤操作:
- 从数组 a[] 中找到最小值。初始化一个变量ans = -1 来存储减法运算的结果。
- 从数组 a[] 的最小元素迭代到 0 并将变量curr初始化为 0,该变量存储计数减法以使数组元素相等。
- 遍历数组并检查 a[i] 是否不等于 x,即第一个数组中的最小元素,然后使其等于最小值,否则更新 curr 为零。
- 检查 curr 是否不等于 0 然后更新 ans 因为 curr 最后返回ans 。
下面是上述方法的实现:
C++
// C++ program to count the operations
// to make all elements of array a[]
// equal to its min element
// by performing a[i] – b[i]
#include
using namespace std;
// Function to convert all Element of
// first array equal using second array
int findMinSub(int a[], int b[], int n)
{
// Get the minimum from first array
int min = INT_MAX;
for (int i = 0; i < n; i++) {
if (a[i] < min)
min = a[i];
}
// Variable that stores count of
// resultant required subtraction
// to Convert all elements equal
int ans = -1;
for (int x = min; x >= 0; x--)
{
// Stores the count subtraction to
// make the array element
// equal for each iteration
int curr = 0;
// Traverse the array and check if
// a[i] is not equal to x then
// Make it equal to minimum else
// update current equal to zero
for (int i = 0; i < n; i++) {
if (a[i] != x) {
if (b[i] > 0
&& (a[i] - x) % b[i] == 0) {
curr += (a[i] - x) / b[i];
}
else {
curr = 0;
break;
}
}
}
// Check if curr is not equal to
// zero then update the answer
if (curr != 0) {
ans = curr;
break;
}
}
return ans;
}
// Driver code
int main()
{
int a[] = { 5, 7, 10, 5, 15 };
int b[] = { 2, 2, 1, 3, 5 };
int n = sizeof(a) / sizeof(a[0]);
cout << findMinSub(a, b, n);
return 0;
}
Java
// Java program to count the operations
// to make all elements of array a[]
// equal to its min element
// by performing a[i] – b[i]
import java.util.*;
class GFG{
// Function to convert all element of
// first array equal using second array
static int findMinSub(int a[], int b[], int n)
{
// Get the minimum from first array
int min = Integer.MAX_VALUE;
for(int i = 0; i < n; i++)
{
if (a[i] < min)
min = a[i];
}
// Variable that stores count of
// resultant required subtraction
// to Convert all elements equal
int ans = -1;
for(int x = min; x >= 0; x--)
{
// Stores the count subtraction
// to make the array element
// equal for each iteration
int curr = 0;
// Traverse the array and check
// if a[i] is not equal to x then
// Make it equal to minimum else
// update current equal to zero
for(int i = 0; i < n; i++)
{
if (a[i] != x)
{
if (b[i] > 0 &&
(a[i] - x) % b[i] == 0)
{
curr += (a[i] - x) / b[i];
}
else
{
curr = 0;
break;
}
}
}
// Check if curr is not equal to
// zero then update the answer
if (curr != 0)
{
ans = curr;
break;
}
}
return ans;
}
// Driver code
public static void main(String[] args)
{
int a[] = { 5, 7, 10, 5, 15 };
int b[] = { 2, 2, 1, 3, 5 };
int n = a.length;
System.out.print(findMinSub(a, b, n));
}
}
// This code is contributed by 29AjayKumar
Python3
# Python3 program to count the operations
# to make all elements of array a[]
# equal to its min element
# by performing a[i] – b[i]
# Function to convert all element of
# first array equal using second array
def findMinSub(a, b, n):
# Get the minimum from first array
min = a[0]
for i in range(0, n):
if a[i] < min:
min = a[i]
# Variable that stores count of
# resultant required subtraction
# to Convert all elements equal
ans = -1
for x in range(min, -1, -1):
# Stores the count subtraction
# to make the array element
# equal for each iteration
curr = 0
# Traverse the array and check
# if a[i] is not equal to x then
# Make it equal to minimum else
# update current equal to zero
for i in range(0, n):
if a[i] != x:
if (b[i] > 0 and
(a[i] - x) % b[i] == 0):
curr += (a[i] - x) // b[i]
else:
curr = 0
break
# Check if curr is not equal to
# zero then update the answer
if curr != 0:
ans = curr
break
return ans
# Driver code
a = [ 5, 7, 10, 5, 15 ]
b = [ 2, 2, 1, 3, 5 ]
n = len(a)
print(findMinSub(a, b, n))
# This code is contributed by jrishabh99
C#
// C# program to count the operations
// to make all elements of array a[]
// equal to its min element
// by performing a[i] – b[i]
using System;
class GFG{
// Function to convert all element of
// first array equal using second array
static int findMinSub(int []a, int []b, int n)
{
// Get the minimum from first array
int min = Int32.MaxValue;
for(int i = 0; i < n; i++)
{
if (a[i] < min)
min = a[i];
}
// Variable that stores count of
// resultant required subtraction
// to Convert all elements equal
int ans = -1;
for(int x = min; x >= 0; x--)
{
// Stores the count subtraction
// to make the array element
// equal for each iteration
int curr = 0;
// Traverse the array and check
// if a[i] is not equal to x then
// Make it equal to minimum else
// update current equal to zero
for(int i = 0; i < n; i++)
{
if (a[i] != x)
{
if (b[i] > 0 &&
(a[i] - x) % b[i] == 0)
{
curr += (a[i] - x) / b[i];
}
else
{
curr = 0;
break;
}
}
}
// Check if curr is not equal to
// zero then update the answer
if (curr != 0)
{
ans = curr;
break;
}
}
return ans;
}
// Driver code
public static void Main()
{
int []a = { 5, 7, 10, 5, 15 };
int []b = { 2, 2, 1, 3, 5 };
int n = a.Length;
Console.Write(findMinSub(a, b, n));
}
}
// This code is contributed by Code_Mech
Javascript
8
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live