/**
* @className:Exercise14
* @Description:给定一个长度为n的且已经按升序排序的整型数组a[]和一个整数x,设计一个函数,判断是否存在两个
* 元素事他们的和为x,如果存在返回0,否则返回-1
* @author:TAO
* @Date:2018/6/10 9:39
*/
/**算法思想:本题主要是看抓住字眼的能力,题目本身没什么难度,看能否使用更低的复杂度解决此问题
* 如何在O(n)的时间复杂度内完成本算法?可以设计两个指针,分别指向头和尾,
* a[头]+a[尾]==x 返回0;
* a[头]+a[尾]>x 尾指正--;
* a[头]+a[尾]<x 头指正++;
* 这样就可在线性时间复杂度完成算法。
* */
public class Exercise14 {
public static void main(String[] args) {
int []a=new int[]{1,3,5,6,7,9,10};
if(isSum(a,2)==0)
System.out.println("find");
else
System.out.println("the sum is not exit!");
}
public static int isSum(int []a,int x){
int low=0,high=a.length-1;
while (low<high){
if(a[low]+a[high]==x)
return 0;
else if(a[low]+a[high]>x)
high--;
else
low++;
}
return -1;
}
}
/**拓展题:如果是求两数之差是否等于x呢?(同样是华科历年真题)
*总体来说,做的比较多了之后,发现套路还是比较多的。熟能生巧
* */
华科历年真题:两数之和或者两数之差
最新推荐文章于 2022-05-04 22:53:36 发布