2016-07-05 3 views
0

(항상 정렬 된) 이러한 요소의 배열이 있다고 가정합니다.배열의 범위 찾기

[1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3] 

우리의 목표는 주어진 값의 최소 - 인덱스 및 최대 - 인덱스를 찾는 것입니다. 3 최소 인덱스는 8이며, 최대-지수는 11.

것을, 우리는 3

우리는 신속하게 볼 수있는 요소의 최소 인덱스와 최대 인덱스 검색한다고 가정하자 값 1, 최소값은 0이고 최대 값은 3입니다.

어떻게 JavaScript로 최소값과 최대 값을 구할 수있는 솔루션을 개발하겠습니까? 나는이 일을 시도했지만, 어떻게 해야할지 모르겠다. 나는 항상 잘못된 대답을 얻는다.

+4

이것은 http://codegolf.stackexchange.com/ – deltree

+0

[Array.indexOf()] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf)가 아닙니다.) 및 [Array.lastIndexOf()] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/lastIndexOf)는 다음 번 게시물 코드에 대한 대답입니다. – Gintoki

+2

이 숙제가 ....? – Darren

답변

7

당신은 Array.indexOf() 시도 할 수 있습니다 및 Array.lastIndexOf()

var sortedArr =[1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3]; 
 

 
console.log(sortedArr.indexOf(1)); 
 
console.log(sortedArr.lastIndexOf(1));

+1

확실한 대답 – MrFabio

-1
var data={1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3}; 
var value=3; 
var min=data.length; 
var max=0; 

for(var key in data){ 
    if(data[key]==value){ 
     if(key<min){ 
      min=key; 
     } 
    if(key > max){ 
      max=key; 
    } 
    } 
console.log(min); 
console.log(max); 
+0

코드가 질문에 대답하는 이유를 설명하십시오. –

+0

죄송합니다. 비행 중에했는데 오류가 있습니다. – Hassan

+0

올바른 코드 : – Hassan

0

당신이 원하는 무엇인가요?

var myarr = [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3]; 
 
var minNum = myarr[0]; 
 
var maxNum = myarr[1]; 
 
var minNumStartINDX, maxNumStartINDX, minNumEndINDX, maxNumEndINDX; 
 
/********************************************/ 
 
for (var x = 0; x < myarr.length; ++x) { 
 
    if (minNum >= myarr[x]) { 
 
    minNum = myarr[x]; 
 
    minNumEndINDX = x; 
 
    } 
 
} 
 
for (var x = 0; x < myarr.length; ++x) { 
 
    if (minNum >= myarr[x]) { 
 
    minNumStartINDX = x; 
 
    break; 
 
    } 
 
} 
 
for (var x = 0; x < myarr.length; ++x) { 
 
    if (maxNum <= myarr[x]) { 
 
    maxNum = myarr[x]; 
 
    maxNumEndINDX = x; 
 
    } 
 
} 
 
for (var x = 0; x < myarr.length; ++x) { 
 
    if (maxNum <= myarr[x]) { 
 
    maxNumStartINDX = x; 
 
    break; 
 
    } 
 
} 
 
/********************************************/ 
 
console.log(minNum); 
 
console.log(minNumStartINDX + "-" + minNumEndINDX); 
 
console.log(maxNum); 
 
console.log(maxNumStartINDX + "-" + maxNumEndINDX);

1
기본적으로 Array.indexOf()

Array.lastIndexOf()는 그것을 할 것입니다하지만 그들은 분명 선형 시간 O(n)에서 수행되는 (요소가 발견 될 때까지 루프 전체 배열을 통해 이동) 선형 검색을 수행 할 수 있습니다 .

배열이 항상 정렬되어 있으면이 속성을 사용하여 최적화하고 이진 검색을 사용할 수 있습니다. 그것은 더 빠른 방법이고 대수 시간 O(log n)에서 그것을 할 것입니다.

그 다음에 우리는 단순히 발견 된 색인 앞과 뒤의 요소를 검사하고 우리 요소와 같지 않은 요소를 찾을 때까지 간단히 검사합니다. 지난 선두로부터를 찾는

:

var i= foundIndex; 
while(sortedArr[i] == sortedArr[foundIndex]){ 
    i++; 
} 
foundIndex = i; 

그리고를 선두 : 그것 뿐이다

var i= foundIndex; 
while(sortedArr[i] == sortedArr[foundIndex]){ 
    i--; 
} 
foundIndex = i; 

! 특히 큰 배열이있는 경우 런타임에 많은 도움이됩니다. 어디서나 이진 검색 구현을 찾을 수 있으며 그 중 하나만 사용하십시오.