数字在排序数组中出现次数
题目描述
题目分析
| 本题只需要通过二分查找,找到数字在数组中的位置,然后前后遍历数组,计算出现的次数即可。(题目没有说明是升序还是降序,需自行判断) |
代码实现
class Solution {
public:
int GetNumberOfK(vector<int> data, int k) {
int iNum = 0;
bool fSort = true;
if (data.size() == 0)
return 0;
if (data[0] > data[data.size() - 1])
fSort = false;
for (int iBegin = 0, iMid = (data.size() - 1) / 2, iEnd = data.size(); iBegin != iEnd; )
{
if(data[iMid] == k)
{
int i = iMid + 1;
while (data[iMid--] == k)
iNum++;
while (data[i++] == k)
iNum++;
break;
}
if (fSort && data[iMid] < k)
{
iBegin = iMid + 1;
iMid = (iEnd + iBegin) / 2;
}
else
{
iEnd = iMid - 1;
iMid = (iEnd + iBegin) / 2;
}
}
return iNum;
}
};