我试图在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
}
答案 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};