最小化与数字的两个距离的总和

时间:2015-10-25 15:49:38

标签: java algorithm minimization

我有一份功课。作业就像那样

数字X,数组A和数组B,数据类型为int。我应该找到最接近X的A [I] + B [J](0 <= I <= A.length,0 <= J <= B.length)。

首先,我试图通过测试All I&amp; J来找到答案。但是有时间限制和内存限制。所以我做了一个假设,不需要大于X的数字。但是,我再次遇到超时问题。我该如何节省时间?

我的代码就是这个。

import java.util.Scanner;
import java.lang.Math;

public class PRO_D{
public static void main(String[] args)
{
    Scanner kb=new Scanner(System.in);
    int aLen=kb.nextInt();
    int bLen=kb.nextInt();
    long number=kb.nextLong();
    long distance=100;
    long dist=100;
    int aCnt=0, bCnt=0;
    long temp;

    kb.nextLine();

    long[] arrA=new long[aLen];
    long[] arrB=new long[bLen];

    for(int i=0; i<aLen; i++)
    {
        temp = kb.nextLong();
        if (temp <= number)
        {
            if(number-temp<distance)
            {
                distance=number-temp;
            }
            arrA[i] = temp;
            aCnt++;
        }
        else if(number-temp<distance)
        {
            arrA[i]=temp;
            aCnt++;
        }
    }

    for(int i=0; i<bLen; i++)
    {
        temp = kb.nextLong();
        if (temp <= number)
        {
            if(number-temp<distance)
            {
                distance=number-temp;
            }
            arrB[i] = temp;
            bCnt++;
        }
        else if(number-temp<distance)
        {
            arrB[i]=temp;
            bCnt++;
        }
    }

    for(int i=0; i<aCnt; i++)
        for(int j=0; j<bCnt; j++)
        {
            temp=Math.abs(number-arrA[i]-arrB[j]);
            if(dist>temp)
                dist=temp;
        }
    System.out.println(dist);
}

1 个答案:

答案 0 :(得分:0)

如果对数组进行排序,则修改后的binary search会跟踪距离可能有效。