首页 > 解决方案 > 最大限度地利用车辆。从2个数组中查找最大值

问题描述

我正在尝试解决一个简单的优化问题并提出了解决方案。只是想知道它是否正确。这是问题描述

例如,有一种车辆可以行驶一定的最大距离,例如 3000 英里,之后需要维修。有2个数组,1个outgoing数组和1个returning数组。每个数组元素表示距离。我必须提出 2 个数字,一个来自outgoing阵列,另一个来自incoming阵列,以最大限度地利用车辆。假设我可以使用总距离 3000,它是最好的或最接近它的。我已经为它编写了一个程序,并希望如果它是正确的或有缺陷的,我是否可以从其他人那里获得输入。

public class Vehicle {
    public static void main(String[] args) {
        Integer[] outgoing = {2710,300,2500,2800,700};
        Integer[] returning = {2200,289,490};
        int l1=0,l2=0;
        Arrays.sort(outgoing, Collections.reverseOrder());
        Arrays.sort(returning);
        int range = 3000;
        int max = 0;
        int out = 0;
        int ret = 0;
        while(l1<outgoing.length && l2<returning.length) {
            int sum = outgoing[l1]+returning[l2];
           if (sum<=range && sum>max) {
               max = sum;
               out = outgoing[l1];
               ret = returning[l2];
           }
           if(sum>range) {
               l1++;
           } else {
               l2++;
           }
        }
        System.out.println(max);
        System.out.println(out);
        System.out.println(ret);
    }
}

我采用的方法是outgoing按相反顺序和returning自然顺序对数组进行排序。然后我尝试通过从每个数组中选择一个元素来找到可能的最大总和。如果临时总和超过允许的最大距离,我将按降序移动数组的指针,否则我按升序移动数组的指针。

标签: javaalgorithmsortingmerge

解决方案


我理解阅读您的描述是,我们必须找到两个小于或等于的整数的最大总和,range并且一个整数取自outgoing数组,另一个整数取自returning数组。

最近,我在HackerRank中解决了类似的问题,并在这里写了一篇社论。因此,您的方法类似于社论中描述的方法编号 - 3。所以,这是一个正确的做法。


推荐阅读