【问题标题】:Calculate average of any two numbers in a given array in JavaScript?计算JavaScript中给定数组中任意两个数字的平均值?
【发布时间】:2021-06-13 08:14:59
【问题描述】:

我在一次采访中被问到这个问题。我无法解决它。

假设我们有一个数组let arr = [4,5,10,9,8]

用 JavaScript 编写代码以打印大于给定数组中任意两个元素的平均值的数字。

假设我决定计算 5 和 9 的平均值。平均值为 7。所以答案将是大于 7 的数字,即 8 9 和 10 应该打印在控制台上。

注意-我们必须找到任何两个元素的平均值然后检查,而不是所有数字的平均值。 有人可以帮忙解释一下逻辑吗?

【问题讨论】:

  • 有结果了吗?
  • 结果取决于您选择的用于计算平均值的数字。
  • 你能显示这个输入的结果吗[4,5,10,9,8]
  • 假设我决定计算 5 和 9 的平均值。平均值为 7。所以答案将是大于 7 的数字,即 8 9 和 10 应该打印在控制台上。
  • @Developer_06 将这些详细信息添加到您的问题中

标签: javascript arrays


【解决方案1】:

我不知道这是否对你有帮助:

let arr = [4,5,10,9,8]
arr.sort((a,b) => a-b)    // sorted array

function greaterThanAverage(x,y){
    let average = (x+y)/2
    let index = arr.findIndex(e => e > average )
    return arr.slice(index == -1 ? arr.length : index)
}

console.log(greaterThanAverage(5,9))
console.log(greaterThanAverage(10,9))
console.log(greaterThanAverage(5,4))
console.log(greaterThanAverage(30,4))

【讨论】:

  • 此解决方案有效。我们也可以使用 2 个 for 循环来实现它吗?
【解决方案2】:

所以根据问题,我们必须显示所有大于两个元素的平均值的数字。

所以最好选择数组中最小的两个元素,找出所有大于它们平均值的数字。

function solve(arr) {
    arr.sort(function (a, b) { return a - b });
    let firstMinimum = arr[0];
    let secondMinimun = arr[1];
    let avg = (firstMinimum + secondMinimun) / 2;

    for (let i = 0; i < arr.length; i++) {
        if (arr[i] > avg) console.log(arr[i]);
    }
}
solve([4, 5, 10, 9, 8]);

【讨论】:

    【解决方案3】:

    对我来说,您似乎只能得到两个结果:

    • 如果两个最大值相同,则没有结果,因此没有值大于平均值。
    • 如果存在下一个较小的值,则只有最大值。

    另一种解决方案可能是选择一对并根据该对的平均值过滤数组 basex。

    const
        values = [4, 5, 10, 9, 8];
    
    for (let i = 0, l = values.length - 1; i < l; i++) {
        for (j = i + 1; j < values.length; j++) {
            const average = (values[i] + values[j]) / 2;
            console.log(values[i], values[j], '|', average, '|', ...values.filter(v => v > average));
        }
    }

    【讨论】:

    • 所以我们不能计算任何两个元素的平均值?
    • 我对any这个词有疑问。这对你意味着什么?
    • 我认为他在说我们可以考虑所有对的平均值,并且当前数字应该大于其中至少一个
    【解决方案4】:

    这是 O(n) 的解决方案。 找到 min 和 secondMin,取平均值,它会给你最小平均值。

        const values = [4, 5, 10, 9, 8];
        const minValue = Math.min(...values);
        values.splice(values.indexOf(minValue),1);
        const secondMinValue = Math.min(...values);
        const minAverage = (minValue + secondMinValue)/2;
        const result = values.filter(val => val > minAverage);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-05
      • 2020-08-01
      相关资源
      最近更新 更多