2014-09-03 4 views
0

У меня есть три отсортированных массива. Мне нужно найти пятерку из пяти элементов из этого массива. Я могу найти первый элемент с наибольшим размером элемента. Как я найду другого?Как найти наибольшие элементы из отсортированного массива?

Вы можете предложить нам, как мы можем найти другие 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/

+0

не это просто будет легче создать единый объединенный массив, вроде этого, то палить финальные 5 элементов? –

+0

@MarcB Ну, это идея, не так ли? Объединить массивы в порядке убывания и остановиться, когда вы нажмете 5 элементов в объединенном массиве? – beaker

+0

Да, но OP делает чертовски много дополнительной работы вместо базового 'pop_5 ((array1 + array2 + array3) .sort())' (псевдокод, конечно) –

ответ

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

Использовать var maxArray = flatArray.slice (0, 5); для извлечения 5 верхних элементов. – Swetha

+0

спасибо, обновлено –

+0

@Plantface, почему вы не играете с Jquery lib? Я бы получил несколько голосов :-) –

0

Я хотел бы предложить следующую идею:

Поскольку вы ищете топ-5 значений, то они, в худшем случае, все они будут в одном списке. Таким образом, для проверки требуется не более 5 * 3 = 15 значений.

Затем вы можете взять 5 наивысших значений из каждого списка (что должно быть тривиально, если список уже отсортирован), а затем поместить их в другой список. Теперь у вас есть список из 15, и вы хотите найти 5 лучших значений из этого списка. Существуют разные способы сделать это: вы можете отсортировать список, затем взять верхние 5 значений или просто перебрать список в списке, каждый раз находить максимальное.

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 
+0

обратите внимание, что параметры сортировки гарантируют, что значения отсортированы по порядку (т.е. 2,3,7,8,12,12 и т. Д. Вместо .sort(), который возвращает 12,12,12,2,3,7,8 потому что он сортируется по первой цифре). –

+0

Вы не можете объединить массивы с '+'. Это не PHP. –

+0

lol ooops спасибо. –

0

Plain 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); 
} 
+1

Приходите сейчас, это могло быть хорошим предложением по другому ответу: D –

+0

привет спасибо за ответ, почему эта функция используется внутри функции сортировки sortInverse (a, b) {return a - b; } – Shruti

Смежные вопросы