给定一个整数数列,找出其中和为特定值的那两个数。
你可以假设每个输入都只会有一种答案,同样的元素不能被重用。
示例:
给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
1 <?php 2 //给定一个整数,找到两个数使得它们的和等于一个给定的数target 3 4 5 function solution($data, $target) 6 { 7 //1.校验数据:数组为空/给定的值不是数组,返回false 8 if(empty($data) || !is_numeric($target)) 9 { 10 return false; 11 } 12 13 //2.复制一个临时数组,将数组$data的值与键调换 14 $tmp = array_flip($data);//存在冲突,后面值的key会覆盖前面值的key 15 16 //3.寻找是否存在两个数的和等于$target 17 $len = count($data); 18 for($i=0; $i<$len; ++$i) 19 { 20 $key = $target - $data[$i]; 21 if(isset($tmp[$key]) && $i != $tmp[$key])//存在两个数和等于target,且两数的key值不一样 22 { 23 return [$i, $tmp[$key]]; 24 } 25 } 26 return false; 27 } 28 29 $arr = [2, 7, 11, 15, 2];//给定的数组 30 $target = 4; //给定的数 31 $res = solution($arr, $target); 32 echo "<pre>"; 33 print_r($res); 34 35 $arr = [2, 7, 3, 15, 2];//给定的数组 36 $target = 6; //给定的数 37 $res = solution($arr, $target); 38 echo "<pre>"; 39 print_r($res);