/**
* 2.11快速寻找数组中的两个数的和等于给定的数字
假定数组已经排好序,并且至少存在一对这样的数字 * @author Administrator
*
*/
public class FindTwoNumInArray {
/**
* 解法1、直接遍历数组、性能较低
*/
/**
* 解法2、首尾相加法,若和大于给定的值,则将大数向后移,若和小于给定值,则将小数向前移
* @param sum
* @param arr
*/
public void find(int sum,int[] arr){
int front = 0;
int rear = arr.length-1;
while(front<rear){
if(arr[front]+arr[rear]>sum)
rear--;
else if(arr[front]+arr[rear]<sum)
front++;
else{
System.out.println(arr[front]+" "+arr[rear]);
front++;
rear--;
}
}
}
}
@Test
public void findTwoNumInArray(){
int[] arr = {1,2,5,6,7,8,9,11,16,17,18,21};
FindTwoNumInArray ftni = new FindTwoNumInArray();
ftni.find(20, arr);
}