我有一個大小均勻的數字陣列,現在我只想從陣列中洗掉 2 個元素并重新排列它,以便這個新陣列的相鄰元素的總和最小。
例子:
array size even say 8.
array elements : 1,3,4,6,3,4,100,200
Ans:
5
解釋:
在這里,我將洗掉 100 和 200,因為它們可以產生接近 100 的差異。
因此在洗掉 2 個元素后重新排列陣列,使總和最小:相鄰對是: (1 3) = 2 , (4 3) = 1, (6 4) = 2 。所以總和 = 2 1 2 = 5
例子:
array size even say 4.
array elements : 1,50,51,60
Ans:
1
說明:這里我將洗掉 1 和 60,以便獲得最小值。為了獲得最小總和,我將考慮以下對:[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;
}
uj5u.com熱心網友回復:
您需要先對陣列進行排序,因為我們總是希望具有相似大小的元素彼此靠近。
然后,我們選擇可以洗掉的所有兩對:(n(n-1)/2) 對。計算每次移除的值并回傳最小值。
uj5u.com熱心網友回復:
代碼:
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
(也許我還是誤解了你,如果是這樣,那么在這個答案下的評論中寫下錯誤的地方)
編輯:
代碼:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/390134.html
