找到要添加的最小值,使数组变得平衡
给定一个偶数大小的数组,任务是找到可以添加到元素的最小值,以使数组变得平衡。如果数组元素的左半部分之和等于右半部分之和,则数组是平衡的。假设我们有一个数组 1 3 1 2 4 3。前三个元素的总和是 1 + 3 + 1 = 5,后三个元素的总和是 2 + 4 + 3 = 9
所以这是不平衡的,为了使其平衡,我们可以添加的最小数字是 4 到前半部分的任何元素。
例子 :
Input : 1 2 1 2 1 3
Output : 2
Sum of first 3 elements is 1 + 2 + 1 = 4,
sum of last three elements is 2 + 1 + 3 = 6
To make the array balanced you can add 2.
Input : 20 10
Output : 10
这个想法很简单,我们计算前半部分和后半部分的总和。一旦计算出这些总和,我们就会返回这两个值的绝对差。
C++
#include
using namespace std;
// Returns minimum value that need to be added
// to make array balanced.
int minValueToBalance(int a[], int n)
{
// Calculating sum of first half elements
// of an array
int sum1 = 0;
for (int i = 0; i < n/2; i++)
sum1 += a[i];
// Calculating sum of other half elements
// of an array
int sum2 = 0;
for (int i = n/2; i < n; i++)
sum2 += a[i];
// calculating difference
return abs(sum1 - sum2);
}
// Driver code
int main()
{
int arr[] = {1, 7, 1, 1, 3, 1};
int n = sizeof(arr)/sizeof(arr[0]);
cout << minValueToBalance(arr, n)<
Java
// Java program to Find the minimum value
// to be added so that array becomes balanced
class Minimum
{
// Returns minimum value that need to
// be added to make array balanced.
public static int minValueToBalance(int a[],
int n)
{
// Calculating sum of first half
// elements of an array
int sum1 = 0;
for (int i = 0; i < n / 2; i++)
sum1 += a[i];
// Calculating sum of other half
// elements of an array
int sum2 = 0;
for (int i = n/2; i < n; i++)
sum2 += a[i];
// calculating difference
return Math.abs(sum1 - sum2);
}
// driver code
public static void main(String[] args)
{
int arr[] = {1, 7, 1, 1, 3, 1};
int n = 6;
System.out.print(minValueToBalance(arr, n));
}
}
// This code is contributed by rishabh_jain
Python3
# Python3 program to Find the
# minimum value to be added so that
# array becomes balanced
# Returns minimum value that need to
# be added to make array balanced.
def minValueToBalance(a, n):
# Calculating sum of first
# half elements of an array
sum1 = 0
for i in range( int(n / 2)):
sum1 += a[i]
# Calculating sum of other
# half elements of an array
sum2 = 0;
i = int(n / 2)
while i < n:
sum2 += a[i]
i = i + 1
# calculating difference
return abs(sum1 - sum2)
# Driver code
arr = [1, 7, 1, 1, 3, 1]
n = len(arr)
print(minValueToBalance(arr, n))
# This code is contributed by "Sharad_Bhardwaj".
C#
// C# program to Find the minimum value
// to be added so that array becomes balanced
using System;
class Minimum {
// Returns minimum value that need to
// be added to make array balanced.
public static int minValueToBalance(int []a,
int n)
{
// Calculating sum of first half
// elements of an array
int sum1 = 0;
for (int i = 0; i < n / 2; i++)
sum1 += a[i];
// Calculating sum of other half
// elements of an array
int sum2 = 0;
for (int i = n / 2; i < n; i++)
sum2 += a[i];
// calculating difference
return Math.Abs(sum1 - sum2);
}
// Driver Code
public static void Main()
{
int []arr = {1, 7, 1, 1, 3, 1};
int n = 6;
Console.Write(minValueToBalance(arr, n));
}
}
// This code is contributed by Nitin Mittal.
PHP
Javascript
输出 :
4