在O(n)时间

时间:2017-10-26 20:12:56

标签: java algorithm time-complexity

我试图在O(n)时间内将两个数字乘以20。试着在这里使用一个hashmap。

我的测试用例是 int arr[] = {2, 4, 1, 6, 5, 40, -1};

它给出了数组索引1和5,它应该是1和4。

public static int[] multToTwenty(int arr[]) {

    HashMap<Integer, Integer> hm = new HashMap<>();

    for (int i = 0; i < arr.length; i++) {

        if (hm.containsKey(20 / arr[i])) {
            return new int[]{hm.get(20 / arr[i]), arr[i]};
        }
        hm.put(arr[i], i);
    }
    return new int[]{-1, -1}; // Nothing found
}

1 个答案:

答案 0 :(得分:4)

20/i是一个整数除法,因此j=20/i并不代表i*j == 20。您需要添加其他支票:

if (20 % arr[i] == 0 && hm.containsKey(20 / arr[i]))

您的代码中还有另一个错误:您返回元素a[i]而不是索引i。你需要返回

new int[]{hm.get(20 / arr[i]), i};