1st number: 50
2. 30
3. 70
4. 40
5. 11
ve diğer sayısı 33
Ben son numarası (php kullanarak) arasında olan iki sayı hesaplamak gerekir .. herhangi bir yardım?
Listenizde üzerinde yineleme ve aşağıdaki iki değerleri bulabilirsiniz:
Pseudo-code:
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
Sonra lowerlimit ve upperlimit cevap vardır. Bu algoritma O (n) zaman ve O (1) ekstra alan gerektirir.
Birçok farklı hedef numaraları ile aynı listeyi test etmek için gidiyoruz eğer o zaman (n) (log n) birinci O gerektiren sıralamak için mantıklı olabilir, ama sonra) n (sadece O (günlüğünde sınırlarını bulabilirsiniz Bir ikili arama kullanarak) zamanı.
Sana kodunu verir ama size ev ödevi için bazı yönergeler vermek değil edeceğiz.
Eğer sorunu çözmek için şu adımları yapmanız gerekir.
Sırala listesi:
11
30
// your 33 is bigger than 30 and smaller than 40, so this is the position you want.
40
50
70
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));
Ben doğru anladım olmadığını bilmiyorum ama bu gibi görünüyor