有4个正数,A,B,C,D。改变他们的位置使得他们两两之间的距离之和最大。
Naive Way :先写一个例子,1 3 4 6。如果采用一种greedy 的方法,第一个固定,第二个挑距离最大的6,第三个挑4,最后是3。这样下来 5 + 3 + 1 = 8。很明显,3和4放在一起距离太小了,把他们分开放最好。于是有了3 1 6 4,这样还是不如 4 1 6 3大。因为最大的和最小的会创造最大距离,而且他们离中间的两个都可以再差一个数,这样将一头一尾放在中间,然后中间两个分立两边,可造成最大距离和。
import java.util.Arrays;
public class Solution{
public static void main(String args[]){
Solution s = new Solution();
int num[] = s.solution(1,3,4,6);
for(int i = 0;i < num.length;i++)
System.out.println(num[i]);
}
public int[] solution(int A, int B, int C, int D){
int num[] = {A,B,C,D};
Arrays.sort(num);
swap(num, 0, 2);
swap(num, 1, 3);
swap(num, 0, 3);
return num;
}
private void swap(int[] num, int x, int y){
int temp = num[x];
num[x] = num[y];
num[y] = temp;
}
}
No comments:
Post a Comment