题目
统计一个数字在排序数组中出现的次数。
题解
既然是排序数组,使用二分查找是效率最高的。找到之后再向两侧拓展一下。
代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
<?php function GetNumberOfK($data, $k) { if (count($data) = = 0 ){ return 0 ; } $index = 0 ; $low = 0 ; $high = count($data) - 1 ; $middle = 0 ; / / 二分查找找到k的index while ($low< = $high){ $middle = ($high + $low)>> 1 ; if ($data[$middle] = = $k){ $index = $middle; break ; } else if ($data[$middle]>$k) { $high = $middle - 1 ; } else { $low = $middle + 1 ; } $index = - 1 ; } / / console.log(index); / / 如果没找到 if ($index = = - 1 ){ return 0 ; } / / 找到了 分别往左右查找边界 $start = $index; $end = $index; $count = 0 ; while ($data[$start] = = $k){ $count + + ; $start - - ; } while ($data[$end] = = $k){ $count + + ; $end + + ; } return $count - 1 ; } |
原文链接:http://blog.csdn.net/acingdreamer/article/details/77488439
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容