给定一个数组,从中查找是否存在两个数的和等于一个给定的x
基本思想:这个题其实有好几种做法,最容易想到的就是进行两重遍历,这个方法的复杂度是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; }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。