2

我有一个问题是:给定一组整数 (e1,e2,e3....) ,确定最小的 ex-ey (减去集合中任何 2 个元素的最小结果)。我知道这与算法有关,但我现在对此一无所知。您可以通过提供 Java 中的逻辑或代码来帮助我。非常感谢!

4

2 回答 2

7

我能想到的最佳解决方案是对集合 ( ) 进行排序O(n log n),然后对集合 ( ) 中的每个连续对进行成对比较O(n)

将每个元素与每个其他元素进行比较的“天真”算法将是O(n^2).

于 2013-05-15T11:30:46.130 回答
-1
public class HelloWorld{

     public static void main(String []args){
        //System.out.println("Hello World");

        int[] array = {10, 21, 323, 24, 45, 26, 47, 58, 69};

        int[] resultPair = {10, 21}; //lets assume

        for(int i=0; i<array.length; i++)
        {
            int minuend = array[i];

            for(int j=0; j<array.length; j++)
            {
                int subtrahend = array[j];

                int res = minuend - subtrahend;
                if(res >= 0 && res < (resultPair[0] - resultPair[1]))
                {
                    resultPair[0] = minuend;
                    resultPair[1] = subtrahend;

                }  

            }
        }
        System.out.println();

        // reverse check
        for(int i=array.length-1; i>=0; i--)
        {
            int minuend = array[i];

            for(int j=0; j<array.length; j++)
            {
                int subtrahend = array[j];

                int res = minuend - subtrahend;
                if(res >= 0 && res < (resultPair[0] - resultPair[1]))
                {
                    resultPair[0] = minuend;
                    resultPair[1] = subtrahend;

                }  

            }
        }

        System.out.println(resultPair[0]);
        System.out.println(resultPair[1]);
        }


}
于 2013-05-15T11:39:09.537 回答