面试题38:数字在排序数组中出现的次数
题目:统计一个数字在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输入4.
思路:使用二分查找法。
要统计数字k在排序数组中出现的次数。也就是分别找到数组中第一个k和最后一个k,然后下标相减。
使用二分法查找找到第一个k :
先拿数组中间的数和k作比较。如果中间的数比k大,那么k只可能出现在数组的前半段,下一轮在前半段中查找;
如果数组中间的数比k小,那么k只可能出现在后半段,下一轮在后半段中查找;
如果中间的数和k相等,先判断是不是第一个k,如果位于中间的数字是k且前一个不是k,则次中间的数字就是第一个k;
如果中间数字前面一个数字也是k,也就是说第一个k肯定出现在数组的前半段,下一轮我们仍然需要在前半段查找。
同样,使用二分法查找最后一个K.
分别找到第一个和最后一个K之后,即可计算K的个数