Найти сумму наибольшего повторного числа в массиве javascript - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь найти наибольшее повторяющееся число в массиве и суммирование его.

Проходя здесь, я нашел решение, чтобы найти максимальное число.Но теперь мне нужно посчитать, сколько существует максимальное (наибольшее) число, и сохранить число максимального числа, а затем суммировать.

Пример: - array- [5,5,7,9,9,9].Таким образом, максимальное число равно 9, и это в 3 раза, поэтому оно будет храниться в другом массиве [9,9,9] и всего = 27.

Я получил это, чтобы найти максимальное число в массиве:-

function evaluate() {
  const input = prompt("Please enter the array of integers in the form: 1,2,3,1")
    .split(',')
    .map(nums => nums.trim());

  function max(numArray) 
{
    var nums = numArray.slice();
    if (nums.length == 1) { return nums[0]; }
    if (parseInt(nums[0]) < parseInt(nums[1])) { nums.splice(0,1); }
    else { nums.splice(1,1); }    
    return max(nums);
}


  if (input == "" || input == null) {
            document.writeln("Sorry, there is nothing that can be calculated."); 
        } else {    

  document.writeln("The largest number is: ");
  document.writeln(max(input) + " with a starting input string of: " + input);
}
}
evaluate();

Итак, я хочу, чтобы мой окончательный вывод был 27 из приведенного выше примера.

Ответы [ 5 ]

0 голосов
/ 21 мая 2018

Вы можете сделать это легко, просто используя один цикл forEach за O (n),

var array = [5, 5, 7, 9, 9, 9];
var max = array[0], total = 0;
array.forEach((a)=>{
  if(a==max){
    total+=max;
  }
  else if(a>max){
    max = total = a;
  }
});
console.log("total:"+total);  
0 голосов
/ 21 мая 2018

Если вы начинаете с массива, вам нужно только уменьшить , чтобы найти максимальное значение и вернуть сумму, например,

var nums = [5,5,7,9,9,9],
    max  = -Infinity,
    result = nums.reduce((acc, num) => num > max? acc = max = num : num == max? acc += num : acc, 0);

console.log('Result: ' + result);
0 голосов
/ 21 мая 2018

Используйте Math.max для получения наибольшего значения, а затем используйте filter & reduce для суммирования значения

// find the largest number
var _gt = Math.max(...[5, 5, 7, 9, 9, 9])
// then filter the array and get the largest values
// and use reduce to sum the numbers
var arr = [5, 5, 7, 9, 9, 9].filter(function(item) {
  return _gt === item
}).reduce(function(acc, curr) {
  acc += curr;
  return acc;

}, 0);
console.log(arr)
0 голосов
/ 21 мая 2018

Вы можете посчитать значения, уменьшить максимальное количество и вернуть умножение значения и количества.

var array = [5, 5, 7, 9, 9, 9],
    max = Object
        .entries(
            array.reduce((r, v) => (r[v] = (r[v] || 0) + 1, r), Object.create(null))
        )
        .reduce((a, b) => a[1] > b[1] ? a : b)
        .reduce((a, b) => a * b);
    
console.log(max);
0 голосов
/ 21 мая 2018

Возвращает объект с указанными выходами {max: 9, items: [9,9,9], sum: 27}.

function maxElementSum(arr) {
    var max = Math.max(...arr)
    var count = arr.filter(el => el == max).length
    return {max: max, items: Array(count).fill(max), sum: max * count}
}

console.log(maxElementSum([5,5,7,9,9,9]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...