在具有最大整数重复项的数组中查找第二个最大值

时间:2019-03-14 19:14:40

标签: javascript arrays while-loop

我正在尝试在数字数组中查找第二大数字,但是最大数字出现了两次,所以我不能只是将其从数组中删除并选择新的最大数字。

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 个答案:

答案 0 :(得分:4)

您可以简单地先创建Set,然后创建sort并降序获取第一个索引元素

if (fscanf(a[i],"%f",&b[i][j][k]) != 1) { ...error management... }

对于那些考虑效率的人。这是海事组织的最佳方法

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

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

console.log(op)

答案 1 :(得分:1)

我建议您做更多类似的事情

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];
  }
}

与转换并返回集合相比,这应该效率更高(尤其是在内存方面)...

答案 2 :(得分:0)

尝试一下:

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];

};