import java.util.Arrays;
/*
* 快速查找满足条件的两个数
* */
public class QuickFindTwoNumbers {
/**
* 在array,中找出两个数,使其和为 p 思路:遍历array, 在 array中查找 有无 p-array[i]这个数,
* 因此该算法就变成了查找算法,怎么使查找复杂度最小,可以先排序再二分,最快的还是hash
*
* @param array
* @param n
* @param p
*/
public static void execute(int[] array, int n, int p) { // 此查找效率较慢
for (int i = 0; i < n; i++) {
int f = p - array[i];
for (int j = 0; j < n; j++) {
if (i != j)
if (array[j] == f) {
System.out.println(array[i] + " " + array[j]);
return;
}
}
}
System.out.println("Not Found");
}
// 先对array进行排序 n*log(n);
public static void execute2(int[] array, int n, int p) {
Arrays.sort(array, 0, n);
for (int i = 0; i < n; i++) {
int j = Arrays.binarySearch(array, p - array[i]);
if (j >= 0 && i != j) {
System.out.println(array[i] + " " + array[j]);
return;
}
}
System.out.println("Not Found");
}
/**
* 第三种方法:对数据进行排序,i,j 指首尾,如果array[i] + array[j] == p 结束,否则 如果 小于p 则i++,大于p
* j-- 直到 i==j
*
* @param args
*/
public static void execute3(int[] array, int n, int p) {
Arrays.sort(array, 0, n);
for (int i = 0, j = n - 1; i < j;) {
int s = array[i] + array[j];
if (s == p) {
System.out.println(array[i] + " " + array[j]);
return;
}
if (s < p)
i++;
else
j--;
}
System.out.println("Not Found");
}
public static void main(String args[]) {
int[] array = { 1, 2, 5, 7, 9 };
execute3(array, array.length, 7);
}
}
编程之美--快速查找满足条件的两个数
原文作者:BOY
原文地址: https://blog.csdn.net/jiang_bing/article/details/8095656
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/jiang_bing/article/details/8095656
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。