62、微软三道面试题
yeardoublehua
1. 给一个有N个整数的数组S..和另一个整数X,判断S里有没有2个数的和为X,
请设计成O(n*log2(n))的算法。
上面来自July的博客,用Java编码:
package beauty;
import java.util.Arrays;
public class M62 {
public Object findSum(int[] data, int n, int x) {
//将返回值定义为Object 可以返回不同类型的值
//谁让Object是一切对象的根源呢,其实返回的都是object而已啊
Arrays.sort(data);
int l=0;
int r=n-1;
while(l<=r)
{
if(data[r]+data[l] == x)
return l+":"+data[l]+"--"+r+":"+data[r]+"\r\n";
else if(data[r]+data[l] >x)
{
r--;
}
else
{
l++;
}
}
return 0;
}
public static void main(String[] args)
{
//只要找出一对就停下了,这里Arrays的sort的复杂度还真不好琢磨
M62 m62 = new M62();
int[] data = {3, -4, 7,4, 8, 12, -5, 0, 9};
int n=9;
int x =12;
System.out.println(m62.findSum(data, n, x));
for(int i=0;i<n;i++)
System.out.print(data[i]+"\t");
}
}