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