/** * 传入一个数组和一个sum值,查找在该数组中是否存在两个数的和为sum * * @author huoqi * @date 2010-08-12 */ public class FindSum { public static void main(String[] args) { int[] arr = { 52, 59, 69, 41, 2, 3740286, 38, 74, 21, 88, 23, 44, 434, 525, 66, 75463, 454354, 43243, 54534, 32446, 765765, 756756, 56345, 65465, 345435, 34, 567, 6, 75, 773, 3740 }; // 先对数组进行排序 arr = quickSort(arr, 0, arr.length - 1); // 然后两边夹逼,进行查找 String findRet = find(arr, 82); if (findRet == null) { System.out.println("not found"); } else { System.out.println(findRet); } } /** * 传入一个数组和一个sum值,查找在该数组中是否存在两个数的和为sum * * @param arr 待查找数组 * @param sum 待查找的和 * @return 返回字符串形式,为相加的两个数,如果没有找到,返回null */ public static String find(int[] arr, long sum) { int start = 0; int end = arr.length - 1; int tempSum = 0; while (true) { tempSum = arr[start] + arr[end]; if (arr[start] + arr[end] == sum) { return String.valueOf(arr[start] + " + " + arr[end]); } else { if (end - start == 1) { return null; } else { if (tempSum > sum) { end--; } else if (tempSum < sum) { start++; } } } } } /** * 快速排序算法 * * @param arr 待排序数组 * @param startIndex 起始下标 * @param endIndex 结束下标 * @return 排序好的数组 */ public static int[] quickSort(int[] arr, int start, int end) { } }