2010-04-15 5 views
0
1st number: 50 
2.   30 
3.   70 
4.   40 
5.   11 

다른 번호 마지막 번호는 (사용 PHP) .. 도움 사이에있는 두 개의 숫자 I 계산할 필요 33일련 번호 중 숫자에 대한 천장 및 바닥을 찾으려면 어떻게합니까?

입니까?

+4

우리는이 순간에 명확하지 않다 당신이 원하는에 대한 더 많은 정보가 필요 것 같다. 또한 우리가 당신을 위해 모든 것을하지 않는 한 당신이 시도한 것. – Yacoby

+0

이 세상에서 아무도이 문제에 답변 할 수 없습니다. – Salil

+0

그래서 결과는 * 33이 30과 40 * 사이이거나 다른 숫자의 최소/최대 사이에 있으면 좋겠습니까? – Gordon

답변

2

코드는 제공하지 않지만 숙제에 대한 지침을 제공합니다.

문제를 해결하려면 다음 단계를 수행해야합니다.

  • 숫자 목록을 정렬하십시오. 배열을 정렬 할 수 있도록 배열에 저장하고있는 것 같습니다.
  • 요소 N이 사용자 번호보다 크고 요소 N-1이 더 작은 위치에서 for 루프 검색을 사용합니다. 그것은 당신에게 당신의 위치를 ​​줄 것입니다.
  • 아, 정말 긴 루프를 피하십시오. 자신의 위치를 ​​찾은 후에 "휴식"을 사용하십시오.

정렬 된 목록 :

11 
30 
// your 33 is bigger than 30 and smaller than 40, so this is the position you want. 
40 
50 
70 
5

으로 반복 목록을 통해 찾아 다음 두 값 :

  • 대상 수보다 작은 가장 큰 수.
  • 대상 번호보다 작은 번호. 의사 코드에서

:

lowerlimit = Unknown 
upperlimit = Unknown 
for each n in list: 
    if (n <= target) and (lowerlimit is Unknown or n > lowerlimit): 
     lowerlimit = n 
    if (n >= target) and (upperlimit is Unknown or n < upperlimit): 
     upperlimit = n 

그런 lowerlimitupperlimit 당신의 대답이다. 이 알고리즘은 O (n) 시간과 O (1) 여분의 공간이 필요합니다.

다른 여러 대상 번호로 동일한 목록을 테스트하려는 경우 O (n log (n)) 시간이 필요한 목록을 먼저 정렬하는 것이 좋지만 그 다음에는 O (log (n)) 시간.

0

function isBetween($several_numbers, $number) 
{ 
    $return_numbers = array(); 
    sort($several_numbers); 
    $j = 0; 
    //find the first number in the array that $number is bigger than 
    while($number > $several_numbers[$j]) $j++; 
    if ($j == 0 || $j > count($several_numbers) - 1) return array(); 
    $return_numbers[0] = $several_numbers[$j-1]; 
    while($number > $several_numbers[$j]) $j++; 
    if ($j > count($several_numbers)-1) return array(); 
    $return_numbers[1] = $several_numbers[$j]; 
    return $return_numbers; 
} 
print_r(isBetween(array(50, 30, 70, 40, 10), 33)); 

내가 제대로 이해하면 나도 몰라하지만 그것이