要求:
给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果没有,返回到它将会被按顺序插入的位置。
你可以假设在数组中无重复元素。
样例:
[1,3,5,6],5 → 2
[1,3,5,6],2 → 1
[1,3,5,6], 7 → 4
[1,3,5,6],0 → 0
算法要求:
O(log(n)) time
解题思路:
就是二分查找
1 <?php 2 //给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果没有,返回到它将会被按顺序插入的位置(数组无重复元素) 3 4 //二分查找 5 function solution($data, $target) 6 { 7 if(empty($data) || !is_numeric($target)) 8 { 9 return [false, -1]; 10 } 11 12 $low = 0; 13 $high = count($data) - 1; 14 while($low <= $high) 15 { 16 $mid = ceil(($low + $high) / 2); 17 if($target == $data[$mid]) { 18 return [true, $mid]; 19 } else if($data[$mid] < $target) { 20 $low = $mid + 1; 21 } else { 22 $high = $mid - 1; 23 } 24 } 25 return [false, $low]; 26 } 27 28 $arr = [1, 3, 5, 6]; 29 $target = 4; 30 $res = solution($arr, $target); 31 echo "<pre>"; 32 print_r($res);