当前位置: 首页 > 知识库问答 >
问题:

如何不依赖于java中的键值而顺序地从树状图中获得输出

麹耘豪
2023-03-14

我有编程问题。我有两个数组。nums1={1,7,11}和nums2={2,4,6}。我必须找出从每个数组到第k次取1个数的最小和。在我的例子中,k=3。所以最小的和是{12=3},{14=5},{16=7}。数组总是按顺序排列的。

我已经用Treemap解决了这个问题。

我们开始吧:

public List<int[]> kSmallestPairs(int[] nums1, int[] nums2, int k) {
     Map<Integer,int[]> value=new TreeMap<>();
     int[]arr_hold=new int[2];
     int []solve_arr=new int[k];
     List<int[]> solve = new ArrayList<>();
     ArrayList<Integer>add_sum= new ArrayList<>();
     int sum=0;
     for(int i=0;i<nums1.length;i++){
         for(int j=0;j<nums2.length;j++){
             sum=nums1[i]+nums2[j];
             arr_hold[0]=nums1[i];
             arr_hold[1]=nums2[j];
             value.put(sum,arr_hold);
         }
     }


     return solve;
 }

问题:1。当我打印系统时。出来println(值);输出:

{3=[I@75412c2f, 5=[I@75412c2f, 7=[I@75412c2f, 9=[I@75412c2f, 11=[I@75412c2f, 13=[I@75412c2f, 15=[I@75412c2f, 17=[I@75412c2f}

现在为什么数组的值arr_hold不正确显示?

当我使用Treemap时,它已经以排序格式显示了输出。所以,如果我从树图中取第一,第二,第三个值,我的问题就会解决。但这里的限制是

 value.get() method

搜索元素依赖于键值。所以如果我用一个循环从树图中获取3个最小的值,它会给我空值输出,因为键不匹配。

 for(int k1=0;k1<k;k1++){
         System.out.println(value.get(k1));
     }

输出:空

     null

     null 

我怎样才能用自己的方式解决问题?

共有1个答案

海灵均
2023-03-14

那么这个呢:

import java.util.ArrayList;
import java.util.List;

public class KSmallestPairs {
    public static void main(String[] args) {
        System.out.println(kSmallestPairs(new int[]{1,7,11}, new int[]{2,4,6}, 3));
    }

    public static List<SumPair> kSmallestPairs(int[] leftInts, int[] rightInts, int k) {
        if (k < 1) {
            throw new IllegalArgumentException("k (=" + k + ") must higher than 0!");
        } else if (leftInts.length * rightInts.length < k) {
            throw new IllegalArgumentException("k (=" + k
                    + ") cannot be higher than the length of the cartesian product (="
                    + leftInts.length * rightInts.length + ")");
        }

        final List<SumPair> sumPairs = new ArrayList<>();
        int minLeftIndex = 0;
        int minRightIndex = 0;
        for (int leftIndex = 0, rightIndex = 0;
             leftIndex < leftInts.length
                     && rightIndex < rightInts.length
                     && sumPairs.size() < k; ) {            
            final int leftInt = leftInts[leftIndex];
            final int rightInt = rightInts[rightIndex];
            sumPairs.add(new SumPair(leftInt, rightInt));

            if(leftIndex + 1 < leftInts.length && rightIndex + 1 < rightInts.length) {
                final int nextLeftInt = leftInts[leftIndex + 1];
                final int nextRightInt = rightInts[rightIndex + 1];
                final int sumOfLeftIntAndNextRightInt = leftInt + nextRightInt;
                final int sumOfNextLeftIntAndRightInt = nextLeftInt + rightInt;
                if(sumOfLeftIntAndNextRightInt < sumOfNextLeftIntAndRightInt) {
                    rightIndex++;
                } else {
                    leftIndex++;
                }
            } else if(leftIndex + 1 < leftInts.length) {
                leftIndex++;
                rightIndex = minRightIndex;
                minLeftIndex++;
            } else if(rightIndex + 1 < rightInts.length) {
                leftIndex = minLeftIndex;
                rightIndex++;
                minRightIndex++;
            }
        }
        return sumPairs;
    }

    static class SumPair {
        private final int leftInt;
        private final int rightInt;

        public SumPair(int leftInt, int rightInt) {
            this.leftInt = leftInt;
            this.rightInt = rightInt;
        }

        public int getLeftInt() {
            return leftInt;
        }

        public int getRightInt() {
            return rightInt;
        }

        public int getSum() {
            return leftInt + rightInt;
        }

        @Override
        public String toString() {
            return leftInt + "+" + rightInt + "="+ getSum();
        }
    }
}

输出:

[1+2=3, 1+4=5, 1+6=7, 7+2=9]

它急切地寻找k个最小和对。

 类似资料:
  • 问题内容: 问题 从地图中获取数据 资料格式 注意 如何从上述结果中获得以下值 1.Event_dtmReleaseDate 2.strID 3.Trans_strGuestList 我试过的 res.Map(“ Event_dtmReleaseDate”); 错误:res.Map未定义(类型map [string] interface {}没有字段或方法Map) res.Event_dtmRel

  • 问题内容: 我有 我想按 位置 获得 职位, 而不是关键 职位 。 我不想使用迭代。 还有其他方法可以基于索引获取Value吗? 问题答案: 您无法获得基于索引的值,只是那样行不通。一种解决方法是根据您的值创建一个新列表,然后根据索引获取值。

  • 问题内容: 我在Netbeans中有一个小型Java测试应用程序,该类从中读取输入。如何打开可在其中输入输入的窗口?(我在Windows 7上使用NB 6.7.1)。 问题答案: 可能并不明显,但是在Netbeans中,如果您的主线程正在等待输入,则底部的“输出”选项卡也会接受输入。只需在最后一个输出行下键入,然后按Enter。换句话说,“输出”选项卡与控制台窗口相同。

  • 问题内容: 我想检查用户在程序启动时是否按下了 Shift 键。(这意味着在程序启动前先按 Shift 键)这是一个简单的控制台程序,与X无关。 这可能类似于Win32 函数。 我想知道我是否可以做到这一点以及如何做到,但是不知道直接访问终端有什么利弊。 问题答案: 你不能 该键不被视为字符键,因此,即使您直接访问终端,也将无法检测到该键。 也许您不必。例如,假设您使用的是美式键盘,其中第一行中的

  • 我的问题是如何根据值和键对内容进行排序,并得到一个? 首先,条目需要按值降序排序,如果值发生冲突,也要按键降序排序。 给定的示例: 预期订单: