你好,我是西北工业大学的一名学生,今天偶尔看到《编程之美》一书,对于2.12觉得可以用O(n)这样做:
import java.util.HashSet;
public class Sum2Fac
{
private Number[] pair = new Number[2];
private HashSet<Number> hash = new HashSet<Number>();
public Sum2Fac(double sum,double... arr)
{
for(double tem : arr)
{
if(hash.contains(tem)){
pair[1] = tem;
pair[0] = sum-tem;
}else{
tem = sum - tem;
hash.add(tem);
}
}
}
public Sum2Fac(int sum,int... arr)
{
for(int tem : arr)
{
if(hash.contains(tem)){
pair[1] = tem;
pair[0] = sum-tem;
}else{
tem = sum - tem;
hash.add(tem);
}
}
}
public Number[] getPair()
{
if(pair[0]!=null && pair[1]!=null){
System.out.println("This sum can be make by "+pair[0]+" and "+pair[1]+"!");
}else{
System.out.println("Your input can satisfies the sum!");
}
return pair;
}
public static void main(String[] args)
{
(new Sum2Fac(10.9,1.9,2,3,2,9,8,0)).getPair();
}
}
由于我平时习惯了使用java所以这里用到了java的hash表,应该是O(1)实现吧
多谢批评指正!