首页 > 解决方案 > 如何将给定的数字列表划分为 N 个数组,其中每个数组的总和最接近特定数字 M?

问题描述

给定数组int[] arr = {3,4,7,8,9,10,12,14,14,25,25,28,30,32}

给定具体数字int M = 33

问题是如何将数组划分为数组数量,arr以便N数组的每个总和都试图达到 33(因为 M=33)。我的主要目的只是获得较低的 N 值,最终结果如下所示:

arr1 = {32}
arr2 = {3,30}
arr3 = {4,28}
arr4 = {8,25}
arr5 = {7,25}
arr6 = {4,14}
arr7 = {9,12,10}

这导致我得到 N = 7 个数组,如果你得到的数组少于 7 个,请纠正我,因为我试图获得尽可能少的数量N

约束:

  1. 给定数组中的每个元素只能使用一次

标签: javaarrayscombinations

解决方案


首先,我建议使用蛮力遍历数组中总和为 32 的所有元素,然后,每次 arr[i] + arr[j] = 32 将其作为新对象返回,返回 new int[] {}; (方法应该是数组返回类型)


推荐阅读