【问题标题】:Searching the sum of a Key inside an ArrayList (Java)在 ArrayList (Java) 中搜索 Key 的总和
【发布时间】:2018-05-12 05:56:43
【问题描述】:

我需要搜索在我的 ArrayList 中是否存在与传递给方法的给定数字 X 对应的两个数字的总和。

我在两个不同的文件中有这些数字 - 一个包含数字,另一个包含键。

我做的是:

-用这些数字填充 2 个不同的 ArrayList

-用我必须搜索总和的数字对它进行排序

然后我不知道如何检查给定的键是否是数组列表中包含的两个数字的总和。有什么建议吗?我发布了我的部分代码,只是最后一次尝试。

在这里我对 ArrayList 进行排序并调用方法 elementIsContained 传递“sums.get(i)”,这是我必须在另一个 ArrayList 中搜索的数字。

 case "-a":
            buffer.mergeSort(arrList, 0, arrList.size()-1);
            for(int i=0; i < sums.size(); i++){
            elementIsContained(arrList, 0, arrList.size()-1, sums.get(i) );
            }
            break;

然后我试图以二分法的方式搜索总和,但我不知道如何对所有组合求和以找到关键

我正在考虑避免搜索大于键的项目并搜索其他项目,但是..我不知道,我没有想法!

【问题讨论】:

    标签: java c sorting arraylist binary-search


    【解决方案1】:

    让我们看看操作流程(一种可能的解决方案)

    1. 初始化一个HashSet SET,将包含Numbers的列表中的所有数字插入到SET中。

    2. 开始循环并迭代包含键的列表。因此,对于每次迭代,您都有一个 KEY。

    3. if(Set.contains(Sum-KEY) 那么你有 2 个数字的组合,使得总和等于 KEY。

    【讨论】:

    • 我不能使用 HashSet 我必须用那些 ArrayList 做所有事情。例如,我有一个 ArrayList 填充数字:10 25 40 0 5 17 11 23 7 30 和我的 KEYS,它们是我在方法中以 n 形式给出的数字(sums.get(i) - 我必须签入的总和另一个 ArrayList) 35 22 42 8 11 对于 35 (10 + 25 或 30 + 5)、22 (17 + 5) 和 42 (25 +17) 必须返回 ok ,对于其他的返回 NO 因为我没有组合总和给我这些数字
    • 如果您不能使用 HashSet 但普通的附加数组很好,那么如果范围较小,那么您可以简单地根据索引值匹配应用标题并获得与 HashSet 类似的行为。如果您不能使用额外的空间,那么只能对两个数组进行排序,然后从开始迭代数组 1,从结束开始迭代其他数组并检查总和,如果总和小于 K(目标总和),则增加数组 1 的索引,否则增加索引数组2。
    猜你喜欢
    • 2010-11-02
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多