2014-09-03 9 views
0

배열이 3 개인 정렬 된 배열이 5 개 있습니다. 가장 큰 두 요소를 찾을 수 있습니다. 다른 배열을 찾을 수 있습니까?정렬 된 배열에서 가장 큰 요소를 찾는 방법은 무엇입니까?

다른 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())'(pseudo code, 물론) 대신에 많은 추가 작업을하고있다 –

답변

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 라이브러리를 사용하는 것이 어떻습니까? 나는 어떤 투표를 가지고있을 것이다 :-) –

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

정렬 매개 변수는 값이 순서대로 정렬되도록합니다 (즉, 12,12,12,2,3,7,8을 반환하는 .sort() 대신 2,3,7,8,12,12 등). 첫 번째 숫자로 정렬되기 때문에). –

+0

배열을'+'로 연결할 수 없습니다. 이것은 PHP가 아닙니다. –

+0

감사합니다. –

0

일반 자바 스크립트 (더 라이브러리는 추가되지) :

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

답변을 주셔서 감사합니다.이 함수가 sort 함수 함수 내에서 사용되는 이유는 무엇입니까? sortInverse (a, b) {return a - b; } – Shruti

관련 문제