从地图中获取两个元素,它们的总和等于所需的数字

Getting two elements from a map which their sum equals to a desired number

我正在尝试找到一种方法来从地图中获取前 2 个元素,它们的值相加得到了我想要的总和。 我在想一个解决方案,它结合了 2 张地图,其中第二张地图的键是目标号码的提醒减去第一张地图的条目值。 我迷路了,不确定我错过了什么。 我在这里错过了什么?

您面临的问题是 int 是值,而不是键。 所以 pairOfItems.containsKey(remainder) 不应该编译。 幸运的是,Map 也有 containsValue() 方法。只要对最低性能没有要求,就可以解决你的问题。
...而且您不需要第二张地图。你可以直接问 items.containsValue(reminder)

我建议引入一个新地图 remainderToItem,遍历所有相关项目并将它们的提醒添加到地图中作为键,将项目键作为值

然后再次迭代 relevantItems 地图以发现价格与其他提醒匹配 还要检查 remainderToItem.get(entry.getValue()).equals(entry.getKey())) (如果值是 50 提醒也是 50),这可以防止再次将相同的项目添加到 itemsThatCanBeBought

private static List<String> getTwoItemsWhichSumTo100(Map<String, Integer> items, int target) {

    Map<String, Integer> relevantItems = getRelevantItems(items, target);
    Map<Integer, String> remainderToItem = new HashMap<>();
    List<String> itemsThatCanBeBought = new ArrayList<>();

    for (Map.Entry<String, Integer> entry : relevantItems.entrySet()) {
        int remainder = target - entry.getValue();
        remainderToItem.put(remainder, entry.getKey());
    }

    for (Map.Entry<String, Integer> entry : relevantItems.entrySet()) {

        if (remainderToItem.containsKey(entry.getValue()) && !remainderToItem.get(entry.getValue()).equals(entry.getKey())) {
            itemsThatCanBeBought.add(entry.getKey());
            itemsThatCanBeBought.add(remainderToItem.get(entry.getValue()));
            return itemsThatCanBeBought;
        }
    }
    return itemsThatCanBeBought;
}

private static Map<String, Integer> getRelevantItems(Map<String, Integer> items, int target) {
    Map<String, Integer> relevantItems = new HashMap<>();
    for (Map.Entry<String, Integer> entry : items.entrySet()) {
        if (entry.getValue() < target) relevantItems.put(entry.getKey(), entry.getValue());
    }
    return relevantItems;
}