您的位置:首页 > 其它

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

2017-08-30 15:31 155 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐