如果任意两个数可以相乘且结果大于数组中所有元素之和的两倍,则返回字符串 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
}
我发现数组中所有元素的总和加倍,但无法解决数组中每个元素的乘法。
您可以找到数组中最大的元素,将它们相乘,然后将结果与加倍的总和进行比较。
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]))
假设你不关心数字是否自相乘,尝试使用嵌套循环,它更容易。这样你就可以检查每个元素与其他元素,包括它自己。
类似的东西:
for (var i = 1; i < arr.length; i++) {
for (var j = 1; j < arr.length; j++) {
if(arr[i] * arr[j] > sumDouble){
return 'true';
}
}
}
@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"
}