数组中的最大数字,等于该数组中其他两个数字的乘积

时间:2016-10-06 06:38:02

标签: java arrays

最近,我参加了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;
}

2 个答案:

答案 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;