1st number: 50
2. 30
3. 70
4. 40
5. 11
和其他数字是33
我需要计算最后一个数字之间的两个数字(使用php)..任何帮助?
答案 0 :(得分: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
然后lowerlimit
和upperlimit
就是您的答案。该算法需要O(n)时间和O(1)额外空间。
如果您要测试具有许多不同目标编号的相同列表,那么首先需要O(n log(n))时间对列表进行排序是有意义的,但是您可以在O(log)中找到限制(n))使用二分搜索的时间。
答案 1 :(得分:2)
我不会给你代码,但会为你的作业提供一些指导。
您需要执行以下步骤来解决问题。
排序清单:
11
30
// your 33 is bigger than 30 and smaller than 40, so this is the position you want.
40
50
70
答案 2 :(得分: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));
我不知道我是否理解正确,但这似乎是