Labels

Saturday, February 21, 2015

Four Integers

有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