最近,我参加了Linkedin放置测试,其中有一个问题,其中4个测试用例的输出对我来说是错误的。我无法弄清楚我的错误是因为输入/输出被隐藏了。
无论如何,这是一个问题:
从数组中查找最大元素,其中任何其他两个元素的乘积将等于该数字并返回该数字。如果不是,则返回-1这样的元素。
这是我的解决方案:
static int maxElement(int[] arr) {
Arrays.sort(arr);
int max = arr[arr.length-1];
int result = 0;
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i + 1; j < arr.length; j++) {
result = arr[i] * arr[j];
if (result == max) {
return max;
}
}
}
return -1;
}
答案 0 :(得分:0)
我猜您需要在数组中找到可能的最大数字和数组中两个元素的乘积。
如果我假设这个,那么你的代码在这个测试用例中失败了:
int[] arr = {2,4,5,3,7,6};
,答案应为6
检查以下代码,它将适用于上述测试用例
只需添加一个反向for loop
即可检查可能的值和产品。
static int maxElement(int[] arr) {
Arrays.sort(arr);
for (int k = arr.length-1; k >= 0; k--) {
int max = arr[k];
int result = 0;
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i + 1; j < arr.length; j++) {
result = arr[i] * arr[j];
if (result == max) {
return max;
}
}
}
}
return -1;
}
答案 1 :(得分:0)
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < a.length; i++) {
list.add(a[i]);
}
int maxSum = 0;
for (int i = 0; i < a.length; i++) {
for (int j = i + 1; j < a.length; j++) {
if ((a[i] * a[j]) > maxSum) {
if(list.contains(a[i] * a[j]))
maxSum = a[i] * a[j];
}
}
}
if (maxSum != 0)
return maxSum;
return -1;