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