php求和为s的两个数字(多复制上面写的代码,有利于检查错误)(由浅入深,先写简单算法,做题的话够用就行)
一、总结
1、多复制上面写的代码,有利于检查错误
2、一层循环就解决了,前后两个指针,和大了就后指针前移,和小了就前指针后移
3、由浅入深,先写简单算法,做题的话够用就行
4、php中的PHP_INT_MAX
二、php求和为s的两个数字
题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。
三、代码
多复制上面写的代码,有利于检查错误
<?php //算法:两层循环遍历所有情况,选取其中乘积最小的
function FindNumbersWithSum($array, $sum)
{
$ans=[];
$n=count($array);
$chengji=2100000000;
for($i=0;$i<$n;$i++){
for($j=$i+1;$j<$n;$j++){
if(($array[$i]+$array[$j]==$sum)&&($array[$i]*$array[$j]<$chengji)){
$ans[0]=$array[$i]; //1、这里写成了$i
$ans[1]=$array[$j];
$chengji=$array[$i]*$array[$j];
}
}
}
return $ans;
}
<?php function FindNumbersWithSum($array, $sum)
{
// write code here
$len = count($array);
$i=0;
$j=$len-1;
$multi = PHP_INT_MAX ;//1、php中的PHP_INT_MAX
$a=NULL;$b=NULL;
while($i<$j){ //2、这里是一层循环就解决了,前后两个指针,和大了就后指针前移,和小了就前指针后移
if($array[$i] + $array[$j] > $sum){
$j--;
}elseif(($array[$i] + $array[$j] < $sum)){
$i++;
}else{
if($multi > $array[$i]*$array[$j]){
$multi = $array[$i]*$array[$j];
$a = $array[$i];
$b = $array[$j];
}
$i++;$j--;
}
}
if($a !== NULL){
return [$a,$b]; //3、[$a,$b]
}else{
return [];
} }