Java 中两组大小之间的最小差异2024年9月26日 | 阅读 5 分钟 给定一个包含各种数字的数组。任务是创建不同的组,每个组只包含两个元素,使得包含最大和的组与包含最小和的组之间的差异最小。请注意,任何元素只能属于一个组。此外,不允许遗漏任何元素。换句话说,一个元素必须是一个组的一部分。 示例 1 输入 int arr[] = {5, 0, 9, 7, 15, 11, 19, 17} 输出 3 解释: 让我们为给定数组形成一个两个元素的组。 G1 = {5, 17}, G2 = {0, 19}, G3 = {9, 11}, G4 = {7, 15}。如果我们找出每个组中元素的和,我们得到, G1 = 5 + 17 = 22, G2 = 0 + 19 = 19, G3 = 9 + 11 = 20, G4 = 7 + 15 = 22 因此,我们看到最小和是 19,最大和是 22。因此,差异是 22 - 19 = 3。 示例 2 输入 int arr[] = {4, 11, 5, 3, 7, 2} 输出 4 解释: 让我们为给定数组形成一个两个元素的组。 G1 = {4, 5}, G2 = {11, 2}, G3 = {3, 7}。如果我们找出每个组中元素的和,我们得到, G1 = 4 + 5 = 9, G2 = 11 + 2 = 13, G3 = 3 + 7 = 10。 因此,我们看到最小和是 9,最大和是 13。因此,差异是 13 - 9 = 4。 示例 3 输入 int arr[] = {4, 9, 3, 8, 2, 0, 5} 输出: 无法找到最小差异。 解释: 让我们为给定数组形成一个两个元素的组。 G1 = {4, 9}, G2 = {3, 8}, G3 = {2, 0}。因此,我们看到我们遗漏了元素 5,根据条件,不允许遗漏任何元素。无论我们如何努力形成不同的组,其中一个元素都必须跳过。因此,该解决方案是不可能的。 方法方法很简单。必须将最大值保持在最小值,将最小值保持在最大值,以便最大值和最小值之间的差距最小。为了做到这一点,我们必须以最大元素与最小元素配对,第二大元素与第二大元素配对的方式组合数组中的数字。为了实现这一点,需要对数组进行排序,然后将最后一个元素与第一个元素、倒数第二个元素与第二个元素等进行组合(组成一个组)。以下程序中提到了相同的示例。 文件名: LeastDiff.java 输出 For the input array: 5 0 9 7 15 11 19 17 The minimum difference is: 3 For the input array: 4 11 5 3 7 2 The minimum difference is: 4 For the input array: 4 9 3 8 2 0 5 It is not possible to find the minimum difference. 复杂度分析: 由于程序使用排序,因此程序的时间复杂度为 O(n * log(n))。此外,程序使用数组列表来存储和。因此,程序的空间复杂度为 O(n),其中 n 是输入数组中存在的元素总数。 下一个主题Java 中等差数列中缺失的数字 |
我们请求您订阅我们的新闻通讯以获取最新更新。