排序数组输出指定数字个数

来源:互联网 发布:eclipse导入数据库 编辑:程序博客网 时间:2024/05/22 02:05

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;elsehigh = 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;elselow = 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;}