基本思想:这个题其实有好几种做法,最容易想到的就是进行两重遍历,这个方法的复杂度是o(n2);
</pre><pre name="code" class="java">public static boolean hasAB1(int[] arr,int x){
for(int i=0;i<arr.length-1;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[i]+arr[j]==x)
return true;
}
}
return false;
}
另外一种思路是对数组先排序,然后一个指针指向头部,一个指向尾部,进行遍历比较;
public static boolean hasAB2(int[] arr,int x){
Arrays.sort(arr);
int p1=0;
int p2=arr.length-1;
while(p1<=p2){
int tmp=arr[p1]+arr[p2];
if(tmp==x)
return true;
else if(tmp>x)
p2--;
else
p1++;
}
return false;
}
public static boolean hasAB(int[] arr, int x){
HashSet<Integer> set=new HashSet<>();
for(int i=0;i<arr.length;i++){
if(set.contains(x-arr[i]))
return true;
else
set.add(arr[i]);
}
return false;
}