排列数组,使相邻的空间更小[关闭]
Posted
技术标签:
【中文标题】排列数组,使相邻的空间更小[关闭]【英文标题】:Arrange array so adjacent has less space [closed] 【发布时间】:2022-01-23 22:38:12 【问题描述】:我有一个偶数大小的数组,现在我想从数组中只删除 2 个元素并找到相邻对,使得相邻元素之间的差异之和最小。
示例:
array size even say 8.
array elements : 1,3,4,6,3,4,100,200
Ans:
5
说明:
这里我将删除 100 和 200,这样我就可以得到相邻的最小总和。所以剩下的元素是 [1,3,4,6,3,4] 我选择的相邻对是:(1 3) = |3-1| = 2 , (4 3) = |4-3|=1, (6 4) = |6-4| = 2。所以总和 = 2 + 1 + 2 = 5
示例:
array size even say 4.
array elements : 1,50,51,60
Ans:
1
说明:这里我将删除 1 和 60,这样我将得到最小的和。 所以剩下的元素是 [50, 51],与相邻的 [50 51] = 1 相同。我的代码在这种情况下将失败并返回 49。
如何在java中实现这一点?
我尝试像这样对元素进行排序,但这对于所有类型的输入都不是正确的方法。
public static int process(int[] a)
int n = a.length;
int n1 = n/2-1;
Arrays.sort(arr);
int sum = 0;
for(int i=0; i<n1*2; i+=2)
sum += a[i+1] - a[i];
return sum;
【参考方案1】:
您需要首先对数组进行排序,因为我们总是希望具有相似大小的元素彼此靠近。
然后,我们选择所有可以删除的两对:(n(n-1)/2) 对。计算每次移除的值并返回最小值。
【讨论】:
【参考方案2】:代码:
import java.util.Arrays;
import java.util.stream.IntStream;
public class Main
public static void main(String[] args)
int[] arr = new int[] 1,3,4,6,3,4,100,200;
System.out.println("Array size even say: " + arr.length);
System.out.println("Array elements:" + Arrays.toString(arr));
/*
* Sorting
*/
arr = IntStream.of(arr).sorted().toArray();
System.out.println("Sorted Array: " + Arrays.toString(arr));
int sum = 0;
for (int i = 0; i < arr.length-2; i+=2)
sum += arr[i+1] - arr[i];
System.out.println("\nAns: " + sum);
控制台:
Array size even say: 4
Array elements:[1, 50, 51, 60]
Sorted Array: [1, 50, 51, 60]
Ans: 49
(也许我还是误会了你,如果是这样,那么请在这个答案下面的 cmets 中写下什么是错的)
编辑:
代码:
int[] arr = new int[] 1,3,4,6,3,4,100,200; // with [100,200,1,3,4,6,3,4] answer is the same
System.out.println("Array size even say: " + arr.length);
System.out.println("Array elements:" + Arrays.toString(arr));
int maxSum = Integer.MIN_VALUE;
int sum = 0;
for (int i = 0; i < arr.length; i+=2)
int thisSum = arr[i+1] - arr[i];
sum += thisSum;
if(thisSum > maxSum)
maxSum = thisSum;
System.out.println("\nAns: " + (sum-maxSum));
控制台:
Array size even say: 8
Array elements:[1, 3, 4, 6, 3, 4, 100, 200]
Ans: 5
【讨论】:
以上是关于排列数组,使相邻的空间更小[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Adobe Acrobat Pro 使所有页面的尺寸相同[关闭]