php求和为s的两个数字(多复制上面写的代码,有利于检查错误)(由浅入深,先写简单算法,做题的话够用就行)

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 }
原文地址:https://www.cnblogs.com/Renyi-Fan/p/9068629.html