提问人:vasif mammadov 提问时间:3/19/2023 更新时间:3/19/2023 访问量:220
如果数组中任意两个数字的乘法大于 26,则返回 true,否则返回 false
If any two numbers' multiplication in array is greater than 26 return true, otherwise false
问:
如果任意两个数字可以相乘,则返回字符串 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
}
我发现数组中所有 elemets 的总和是两倍的,但无法解决数组中每个元素的乘法。
答:
0赞
Andrew
3/19/2023
#1
您可以在数组中找到最大的元素,将它们相乘,然后将结果与双倍的总和进行比较。
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赞
Darth_Axel
3/19/2023
#2
假设你不在乎数字是否乘以本身,尝试使用嵌套循环,这更容易。通过这种方式,您可以将每个元素与其他元素(包括其自身)进行检查。
像这样:
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赞
ΑΓΡΙΑ ΠΕΣΤΡΟΦΑ
3/19/2023
#3
@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((e1, e2) => e2 - e1)
let r = b[0] * b[1]
return (r > sum) ? "true": "false"
}
@Nina Scholz coment 之后,将 sort() 修改为 sort((e1, e2) => e1 - e2)
@tatactic coment => sort((e1, e2) => e2 - e1)
评论
0赞
Nina Scholz
3/19/2023
尝试使用 AS 值进行排序...10
0赞
ΑΓΡΙΑ ΠΕΣΤΡΟΦΑ
3/19/2023
sort() 排序为字符串...
0赞
tatactic
3/19/2023
@ΑΓΡΙΑΠΕΣΤΡΟΦΑ阅读: w3schools.com/jsref/jsref_sort.asp 学习如何对数字进行排序
评论