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

来源:互联网 发布:成套报价软件 编辑:程序博客网 时间:2024/04/30 00:44
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);}}

原创粉丝点击