Найти второе по величине значение в массиве, который имеет дубликаты самого большого целого числа - PullRequest
1 голос
/ 14 марта 2019

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

array = [0, 3, 2, 5, 5] (поэтому 3 является вторым по величине значением)

У меня есть этот код, в котором я могу явно вернуть 3, но он не будет работать на других массивах:

    function getSecondLargest(nums) {

      var sorted_array = nums.sort(function (a,b) {return a - b;});
      var unique_sorted_array = sorted_array.filter(function(elem, index, self) {
    return index === self.indexOf(elem);
})

    return unique_sorted_array[unique_sorted_array.length - 2];
}

return unique_sorted_array[unique_sorted_array.length - 2];

Если бы я хотел сделать его более динамичным, есть ли способ, которым я мог бы определить наибольшее значение массива, а затем сравнить его с каждой итерацией массива?

Я думал, что-то вроде:

var greatestNum = sortedArray[-1]

while(greatestNum != i) do {
  //check for the first number that doesn't equal greatestNum
}

Буду признателен за любую помощь.

Ответы [ 3 ]

4 голосов
/ 14 марта 2019

Вы можете просто создать Сначала , а затем sort по убыванию и взять 1-й элемент индекса

let array = [0, 3, 2, 5, 5]

let op = [...new Set(array)].sort((a,b) => b-a)[1]

console.log(op)

Для тех, кто мыслит с точки зрения эффективности. это лучший способ IMO

let array = [0, 3, 2, 5, 5]

let max = -Infinity
let secondMax = -Infinity

for(let i=0; i<array.length; i++){
  if(array[i] > max){
    secondMax = max
    max = array[i]
  }
}

console.log(secondMax)
1 голос
/ 14 марта 2019

Я бы порекомендовал сделать что-то более похожее на

const nums = [0, 3, 2, 5, 5];
nums.sort(function (a,b) {return b - a;})

for (let i = 1; i < nums.length; i++) {
  if (nums[0] !== nums[i]) {
    return nums[i];
  }
}

, который должен быть намного более эффективным (особенно с точки зрения памяти), чем преобразование в набор и обратно ...

0 голосов
/ 14 марта 2019

Попробуйте это:

var intArray = stringArray.map(nums); // now let's sort and  take the second element :

var second = intArray.sort(function(a,b){return b-a})[1];

};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...