1、面试被问道一道算法题,内容是:数组中包含1,2,3,4,5,6,7,8,9,10和一个数字9,求数组中两个数的和是这个值出现的次数,当时脑海中就想到了第一种算法,面试官听完之后,问我从时间维度考虑你觉得怎么,经过分析之后果然发现性能不是很好,所以又写了第二种算法,下面是两种算法
public class TestArray {
// 第一种算法,性能不是很好
private static void methode1(Integer array[], int number){
int count =0;
for(int i=0;i<array.length-1;i++){
for (int j=i+1;j<array.length-1;j++){
if(array[i]+array[j] == number){
count++;
System.out.println("第"+count+"种"+array[i]+" "+array[j]+"="+number);
}
}
}
}
//第二种算法,性能较好
private static void methode2(Integer array[],int number){
Arrays.sort(array);
int begin=0;
int end = array.length-1;
int count=0;
while (begin != end && begin>=0 && end>=0){
if(array[begin]+array[end]<number){
begin++;
}else if(array[begin]+array[end]>number){
end--;
}else{
count++;
System.out.println("第"+count+"种"+array[begin]+" "+array[end]+"="+number);
begin++;
}
}
}
public static void main(String[] args) {
Integer[] arr = {1,2,3,4,5,6,7,8,9,10};
methode1(arr,9);
System.out.println("============");
methode2(arr,9);
}
}