2017移动端 测试题
1. 题目: 在排序数组中,找出给定数字的出现次数,时间效率越高越好,比如 [1, 2, 2, 2, 3] 中2的出现次数是3次。
输入:
1,2,2,2,3
输出:
1(1)
2(3)
3(1)
不定长度可以存入向量,在存入的过程中进行比较并保存结果,最后进行输出。这样就能满足此题目的输入输出的要求。但是需要把所有的结果都列出来
下面提供一种方法,将输入存入vector,用二分法得到指定数字的下界和上界,通过上界和下界的序号得到指定数字的数目。
#include <iostream>
#include<stdlib.h>
#include <vector>
using namespace std;
int getUpper(vector<int> &vec, int num, int size){
int low = 0, high = size - 1;
while (low < high){
int mid = (low + high + 1) / 2;
if (vec[mid] <= num)
low = mid;
else
high = mid - 1;
}
return low;
}
int getLower(vector<int> &vec, int num, int size){
int low = 0, high = size - 1;
while (low < high){
int mid = (low + high) / 2;
if (vec[mid] >= num)
high = mid;
else
low = mid + 1;
}
return low;
}
int main()
{
vector<int> arry;
int n;
while (cin>>n)
{
arry.push_back(n);
char c = cin.get();
if (c ==',')
continue;
if (c == '\n')
break;
}
int size = arry.size();
int num;
cin >> num;
cout << num << '(' << getUpper(arry, num, size) - getLower(arry, num, size) + 1 << ')' << endl;
return 0;
}