数组中任意两个数的乘积大于26返回true,否则返回false

问题描述 投票:0回答:3

如果任意两个数可以相乘且结果大于数组中所有元素之和的两倍,则返回字符串 true。如果不是,则返回字符串 false。

let arr = [2,2,2,2,4,1]
function SumMultiplier(arr) { 

  let sum = arr.reduce((acc, item) => acc +item,0)
  let trueStr = "true"
  let falseStr = "false"
  let double = sum*2
  let arrLength = arr.length
  let i = 0
  let j = 1
  while(i < arrLength){
    let multi = arr[i] * arr[j]
    if(double < multi) {
      j++
    }else{
      return trueStr
    }
  }
  return falseStr 

}

我发现数组中所有元素的总和加倍,但无法解决数组中每个元素的乘法。

javascript dictionary comparison
3个回答
0
投票

您可以找到数组中最大的元素,将它们相乘,然后将结果与加倍的总和进行比较。

function SumMultiplier(arr) {
  const target = arr.reduce((acc, item) => acc + item, 0) * 2;
  const [largest, secondLargest] = findTwoLargest(arr)

  return largest * secondLargest > target ? "true" : "false"
}

function findTwoLargest(arr) {
  let largest = arr[0];
  let secondLargest = -Infinity;

  for (let i = 1; i < arr.length; i++) {
    if (arr[i] > largest) {
      secondLargest = largest;
      largest = arr[i];
    } else if (arr[i] > secondLargest && arr[i] < largest) {
      secondLargest = arr[i];
    }
  }

  return [largest, secondLargest];
}

console.log(SumMultiplier([2, 2, 2, 2, 4, 1]))


0
投票

假设你不关心数字是否自相乘,尝试使用嵌套循环,它更容易。这样你就可以检查每个元素与其他元素,包括它自己。

类似的东西:

for (var i = 1; i < arr.length; i++) {

   for (var j = 1; j < arr.length; j++) {

       if(arr[i] * arr[j] > sumDouble){

            return 'true';
       }
   }
}

0
投票

@tkausl 评论

let arr = [2,2,2,2,4,1]

function SumMultiplier(arr) {
   let sum = arr.reduce((partialSum, a) => partialSum + 2*a, 0);
   let b = arr.slice(0).sort()
   let r = b[arr.length - 2] * b[arr.length - 1]
   return (r > sum) ? "true": "false"
}
© www.soinside.com 2019 - 2024. All rights reserved.