最大重量差

给你一个数组W[1],W[2],…,W[N]。在其中选择K个数,使所选数和剩余数之和之间的绝对差尽可能大。 例如:

null
Input : arr[] = [8, 4, 5, 2, 10]            k = 2Output: 17Input : arr[] = [1, 1, 1, 1, 1, 1, 1, 1]          k = 3Output: 2

有两种可能得到想要的答案。这两个是:选择 K 最大数字或选择 K 最小的数字。根据给定值选择最合适的选项。这是因为在某些情况下,最小k个数的和可以大于数组的其余部分,而在某些情况下,最大k个数的和可以大于数组的其余部分。 方法:

  • 对给定数组进行排序。
  • 获取数组中所有数字的总和并将其存储在 总和
  • 得到第一个 K 数组的编号并将其存储在 sum1
  • 得到最后一个数的总和 K 数组的编号并将其存储在 sum2
  • 输出以下结果: 最大值(abs(S1-(S-S1)),abs(S2-(S-S2)))

C++

// 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

// 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.


python

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#

// 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
// 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
?>


Javascript

<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

本文由 里沙布·班萨尔 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 写极客。组织 或者把你的文章寄去评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。 如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享