您的位置:首页 > 其它

在排序数组中查找和为给定值的两个数字

2011-09-06 20:32 393 查看
package su.interview;

import algorithm.recursive.QuickSorter;
import utils.com.ArrayLister;
import utils.random.NumericRandomer;

/**
* 在排序数组中查找和为给定值的两个数字
*
* @author Toy
*
*/
public class Array_06 {
/**
* 最初我们找到数组的第一个数字和最后一个数字。当两个数字的和大于输入的数字时,把较大的数字往前移动;当两个数字的和小于数字时,把较小的数字往后移动;
* 当相等时,打印出结果。这样扫描的顺序是从数组的两端向数组的中间扫描。
*
* @param a
* @param sum
*/
public void find_01(int[] a, int sum) {
int i = 0;
int j = a.length - 1;
int c = 0;
while (true) {
System.out.println(i + " " + j);
if (i >= j) {
break;
}
if ((a[i] + a[j]) > sum) {
j--;
} else if ((a[i] + a[j]) < sum) {
i++;
} else {
c++;
System.out.println("find: " + a[i] + " " + a[j]);
i++;
j--;
}
}
System.out.println("find sum: "+sum+" find pair count: " + c);
}

/**
* @param args
*/
public static void main(String[] args) {

NumericRandomer r = new NumericRandomer();
Array_06 arr = new Array_06();
QuickSorter sort = new QuickSorter();

int[] a = r.random(15, 20);
int sum = 15;
ArrayLister.showArr(a);
sort.quickSort_01(a, 0, a.length - 1);
ArrayLister.showArr(a);
arr.find_01(a, sum);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: