Diferença Máxima de Peso
Você recebe uma array W [1], W [2],…, W [N]. Escolha K números entre eles de forma que a diferença absoluta entre a soma dos números escolhidos e a soma dos números restantes seja a maior possível.
Exemplos :
Input : arr[] = [8, 4, 5, 2, 10] k = 2 Output: 17 Input : arr[] = [1, 1, 1, 1, 1, 1, 1, 1] k = 3 Output: 2
Existem duas possibilidades para obter a resposta desejada. Estes dois são: Escolha k números maiores ou Escolha k menores números. Escolha a opção mais adequada que se encaixa de acordo com os valores fornecidos. Isso ocorre porque há alguns casos em que a soma dos menores k números pode ser maior do que o restante da array e há alguns casos em que a soma dos maiores k números pode ser maior do que o restante da soma dos números.
Abordagem :
- Classifique a array fornecida.
- Obtenha a soma de todos os números da array e armazene-a na soma
- Obtenha a soma dos primeiros k números da array e armazene-a na soma1
- Obtenha a soma dos últimos k números da array e armazene-a em sum2
- Produza o resultado que é: max (abs (S1- (S-S1)), abs (S2- (S-S2)))
// C++ Program to find maximum weight
// difference
#include <iostream>
#include <algorithm>
using namespace std;
// return the max value of two numbers
int solve(int array[], int n, int k)
{
// sort the given array
sort(array, array + n);
// Initializing the value to 0
int sum = 0, sum1 = 0, sum2 = 0;
// Getting the sum of the array
for (int i = 0; i < n; i++) {
sum += array[i];
}
// Getting the sum of smallest k elements
for (int i = 0; i < k; i++) {
sum1 += array[i];
}
sort(array, array+n, greater<int>());
// Getting the sum of k largest elements
for (int i = 0; i < k; i++) {
sum2 += array[i];
}
// Returning the maximum possible difference.
return max(abs(sum1 - (sum - sum1)), abs(sum2 -
(sum - sum2)));
}
// Driver function
int main()
{
int k = 2;
int array[] = { 8, 4, 5, 2, 10 };
// calculate the numbers of elements in the array
int n = sizeof(array) / sizeof(array[0]);
// call the solve function
cout << solve(array, n, k);
return 0;
}
// JAVA Code for Maximum Weight Difference
import java.util.*;
class GFG {
public static int solve(int array[], int n,
int k)
{
// sort the given array
Arrays.sort(array);
// Initializing the value to 0
int sum = 0, sum1 = 0, sum2 = 0;
// Getting the sum of the array
for (int i = 0; i < n; i++) {
sum += array[i];
}
// Getting the sum of first k elements
for (int i = 0; i < k; i++) {
sum1 += array[i];
}
// Getting the sum of (n-k) elements
for (int i = k; i < n; i++) {
sum2 += array[i];
}
// Returning the maximum possible difference.
return Math.max(Math.abs(sum1 - (sum - sum1)),
Math.abs(sum2 - (sum - sum2)));
}
/* Driver program to test above function */
public static void main(String[] args)
{
int k = 2;
int array[] = { 8, 4, 5, 2, 10 };
// calculate the numbers of elements
// in the array
int n = array.length;
// call the solve function
System.out.print(solve(array, n, k));
}
}
// This code is contributed by Arnav Kr. Mandal.
def solve(array, k):
# Sorting array
array.sort()
# Getting the sum of all the elements
s = sum(array)
# Getting the sum of smallest k elements
s1 = sum(array[:k])
# Getting the sum greatest k elements
array.sort(reverse=True)
s2 = sum(array[:k])
# Returning the maximum possible difference
return max(abs(s1-(s-s1)), abs(s2-(s-s2)))
# Driver function
k = 2
array =[8, 4, 5, 2, 10]
print(solve(array, k))
// C# Code for Maximum Weight Difference
using System;
class GFG {
public static int solve(int []array, int n,
int k)
{
// sort the given array
Array.Sort(array);
// Initializing the value to 0
int sum = 0, sum1 = 0, sum2 = 0;
// Getting the sum of the array
for (int i = 0; i < n; i++) {
sum += array[i];
}
// Getting the sum of first k elements
for (int i = 0; i < k; i++) {
sum1 += array[i];
}
// Getting the sum of (n-k) elements
for (int i = k; i < n; i++) {
sum2 += array[i];
}
// Returning the maximum possible difference.
return Math.Max(Math.Abs(sum1 - (sum - sum1)),
Math.Abs(sum2 - (sum - sum2)));
}
/* Driver program to test above function */
public static void Main()
{
int k = 2;
int []array = { 8, 4, 5, 2, 10 };
// calculate the numbers of elements
// in the array
int n = array.Length;
// call the solve function
Console.WriteLine(solve(array, n, k));
}
}
// This code is contributed by vt_m.
<?php
// PHP Program to find maximum weight
// difference
// return the max value of two numbers
function maxi($a, $b)
{
if ($a > $b)
{
return $a;
}
else
{
return $b;
}
}
function solve(&$arr, $n, $k)
{
// sort the given array
sort($arr);
// Initializing the value to 0
$sum = 0;
$sum1 = 0;
$sum2 = 0;
// Getting the sum of the array
for ($i = 0; $i < $n; $i++)
{
$sum += $arr[$i];
}
// Getting the sum of first k elements
for ($i = 0; $i < $k; $i++)
{
$sum1 += $arr[$i];
}
// Getting the sum of (n-k) elements
for ($i = $k; $i < $n; $i++)
{
$sum2 += $arr[$i];
}
// Returning the maximum possible difference.
return maxi(abs($sum1 - ($sum - $sum1)),
abs($sum2 - ($sum - $sum2)));
}
// DriverCode
$k = 2;
$arr = array(8, 4, 5, 2, 10 );
// calculate the numbers of
// elements in the array
$n = sizeof($arr);
// call the solve function
echo (solve($arr, $n, $k));
// This code is contributed
// by Shivi_Aggarwal
?>
<script>
// JavaScript Code for Maximum Weight Difference
function solve(array, n, k)
{
// sort the given array
array.sort(function(a, b){return a - b});
// Initializing the value to 0
let sum = 0, sum1 = 0, sum2 = 0;
// Getting the sum of the array
for (let i = 0; i < n; i++) {
sum += array[i];
}
// Getting the sum of first k elements
for (let i = 0; i < k; i++) {
sum1 += array[i];
}
// Getting the sum of (n-k) elements
for (let i = k; i < n; i++) {
sum2 += array[i];
}
// Returning the maximum possible difference.
return Math.max(Math.abs(sum1 - (sum - sum1)),
Math.abs(sum2 - (sum - sum2)));
}
let k = 2;
let array = [ 8, 4, 5, 2, 10 ];
// calculate the numbers of elements
// in the array
let n = array.length;
// call the solve function
document.write(solve(array, n, k));
</script>
17
Este artigo é uma contribuição de Rishabh Bansal . Se você gosta de GeeksforGeeks e gostaria de contribuir, você também pode escrever um artigo usando write.geeksforgeeks.org ou enviar seu artigo para review-team@geeksforgeeks.org. Veja o seu artigo na página principal do GeeksforGeeks e ajude outros Geeks.
Escreva comentários se encontrar algo incorreto ou se quiser compartilhar mais informações sobre o tópico discutido acima.
As postagens do blog Acervo Lima te ajudaram? Nos ajude a manter o blog no ar!
Faça uma doação para manter o blog funcionando.
70% das doações são no valor de R$ 5,00...
Diógenes Lima da Silva