当前位置: 代码迷 >> J2SE >> java 最接近点对 栈溢出error解决思路
  详细解决方案

java 最接近点对 栈溢出error解决思路

热度:185   发布时间:2016-04-24 01:43:13.0
java 最接近点对 栈溢出error
Java code
import java.util.*;import java.io.*;public class job {    private static double ipair(double d[], int n, int m) {        if (n == m) {            return Double.MAX_VALUE;        } else if (n == m - 1) {            return Math.abs(d[m] - d[n]);        } else {            double mid;            double d1[] = new double[d.length];            double d2[] = new double[d.length];            mid = findMax(d) / 2 + findMin(d) / 2;            int i, j = 0, k = 0;            for (i = n; i <= m; i++) {                if (d[i] < mid) {                    d1[j] = d[i];                    ++j;                } else {                    d2[k] = d[i];                    ++k;                }            }            double x1 = ipair(d1, 0, j - 1);            double x2 = ipair(d2, 0, k - 1);            double x3 = findMin(d2) - findMax(d1);            return Math.min(x3, Math.min(x1, x2));        }    }    private static double findMax(double d[]) {        double min = Double.MIN_VALUE;        for (int i = 0; i < d.length; i++)            if (min < d[i])                min = d[i];        return min;    }    private static double findMin(double d[]) {        double max = Double.MAX_VALUE;        for (int i = 0; i < d.length; i++)            if (max > d[i])                max = d[i];        return max;    }    public static void main(String args[]) {        Scanner scan = new Scanner(System.in);        String s = scan.nextLine(); // 读取字符串        String str[] = s.split(" ");        double dou[] = new double[str.length];        for (int i = 0; i < str.length; i++) {            dou[i] = Double.parseDouble(str[i]);        }        double ss = ipair(dou, 0, dou.length - 1);        System.out.println("最接近距离 " + ss);    }}


------解决方案--------------------
Java code
public class readtest {    private static double ipair(double d[], int n, int m) {        if (n == m) {            return Double.MAX_VALUE;        } else if (n == m - 1) {            return Math.abs(d[m] - d[n]);        } else {            double mid;            double d1[] = new double[d.length];            double d2[] = new double[d.length];            mid = findMax(d, n, m) / 2 + findMin(d, n, m) / 2;            int i, j = 0, k = 0;            for (i = n; i <= m; i++) {                if (d[i] < mid) {                    d1[j] = d[i];                    ++j;                } else {                    d2[k] = d[i];                    ++k;                }            }            double x1 = ipair(d1, 0, j - 1);            double x2 = ipair(d2, 0, k - 1);            double x3 = findMin(d2, 0, k - 1) - findMax(d1, 0, j - 1);            return Math.min(x3, Math.min(x1, x2));        }    }    private static double findMax(double d[], int n, int m) {        double min = Double.MIN_VALUE;        for (int i = n; i <= m; i++)            if (min < d[i])                min = d[i];        return min;    }    private static double findMin(double d[], int n, int m) {        double max = Double.MAX_VALUE;        for (int i = n; i <= m; i++)            if (max > d[i])                max = d[i];        return max;    }    public static void main(String args[]) {        Scanner scan = new Scanner(System.in);        String s = scan.nextLine(); // 读取字符串        String str[] = s.split(" ");        double dou[] = new double[str.length];        for (int i = 0; i < str.length; i++) {            dou[i] = Double.parseDouble(str[i]);        }        double ss = ipair(dou, 0, dou.length - 1);        System.out.println("最接近距离 " + ss);    }}
  相关解决方案