如何从排序数组中找到最大的元素?

时间:2014-09-03 17:00:48

标签: javascript

我有三个排序的数组我需要从这些数组中找到前五个“5”元素。我能够找到前两个元素的最大元素.how我会找到其他的吗?

你能建议我们如何找到其他3个元素吗?

这是我的代码

 var maxArray=[];
        var array1=[2,7,12,23,40,44,67,88,102]
        var array2=[3,12,14,17,23,40,41,67,108]
        var array3=[8,12,23,40,59,86,119,130]
        var firstMax=array1[array1.length-1];
        var secondMax=array2[array2.length-1];


        alert(array1[array1.length-1]);
        if(array1[array1.length-1]>array2[array2.length-1] && array1[array1.length-1]>array3[array3.length-1]){

            maxArray.push(array1[array1.length-1]) ;
            firstMax=array1[array1.length-1];
            if(array2[array2.length-1]>array3[array3.length-1]){
                secondMax=array2[array2.length-1];
            }else {
                secondMax=array3[array3.length-1];

            }
        }else if(array2[array2.length-1]>array1[array1.length-1]&& array2[array2.length-1]>array3[array3.length-1]){
            maxArray.push(array1[array2.length-1])
            firstMax=array2[array2.length-1];

            if(array1[array1.length-1]>array3[array3.length-1]){
                secondMax=array1[array1.length-1];
            }else {
                secondMax=array3[array3.length-1];

            }

        }else{
            maxArray.push(array3[array3.length-1])
            firstMax=array3[array3.length-1];

            if(array2[array2.length-1]>array1[array1.length-1]){
                secondMax=array2[array2.length-1];
            }else {
                secondMax=array1[array1.length-1];

            }

        }
        maxArray.push(secondMax)

        alert(maxArray)

小提琴 http://jsfiddle.net/9vsjm8uh/

4 个答案:

答案 0 :(得分:2)

jsFiddle(是的,没有jQuery会更好,谢谢@Rajacsp)

var array1 = [2, 7, 12, 23, 40, 44, 67, 88, 102]
var array2 = [3, 12, 14, 17, 23, 40, 41, 67, 108]
var array3 = [8, 12, 23, 40, 59, 86, 119, 130]

var flatArray = array1.concat(array2).concat(array3);

flatArray.sort(function sortNumber(a, b) { return b - a; });
var maxArray = flatArray.slice(0, 5);

alert(maxArray); // 130,119,108,102,88

答案 1 :(得分:0)

我会建议以下想法:

由于您正在寻找前5个值,因此在最坏的情况下,它们都在同一个列表中。因此,最多要检查5 * 3 = 15个值。

然后,您可以从每个列表中取5个最高值(如果列表已经排序,这应该是微不足道的),然后将它们放在另一个列表中。现在您有一个15的列表,并且您想要从此列表中找到前5个值。有不同的方法可以做到这一点 - 您可以对列表进行排序,然后获取前5个值,或者您可以简单地遍历列表,每次都找到最大值。

答案 2 :(得分:0)

合并所有数组,对它们进行排序,然后得到最后5个数值。

var total = array1.concat(array2, array3);
total = total.sort(function(a,b){return a-b});
//Now total[length-5] is the 5th largest value
//total[length-4] is the 4th largest and so on

答案 3 :(得分:0)

普通Javascript(未添加库):

var array1=[2,7,12,23,40,44,67,88,102];
var array2=[3,12,14,17,23,40,41,67,108];
var array3=[8,12,23,40,59,86,119,130];


alert(getTopFive(array1, array2, array3));

function getTopFive(ar1, ar2, ar3){
    var finalArray = array1.concat(array2).concat(array3);
    finalArray.sort(function sortInverse(a,b) { return b - a; });
    return finalArray.slice(0, 5);  
}