在排序数组中,找出给定数字的出现次数
2012-08-27 19:44
381 查看
from: http://blog.csdn.net/yake25/article/details/7346249
#include <iostream>
#include <vector>
#include <fstream>
#include <ctime>
using namespace std;
int low(vector<int> &ivec, int left, int right, int x)
{
while(left < right)
{
int mid = (left + right) / 2;
if(ivec[mid] < x)
left = mid + 1;
else
right = mid;
}
return left;
}
int upper(vector<int> &ivec, int left, int right, int x)
{
while(left < right)
{
int mid = (left + right) / 2;
if(ivec[mid] > x)
right = mid;
else
left = mid + 1;
}
return right;
}
int main()
{
clock_t begin = clock();
int n, x, left, right, first = 0, last = 0;
vector<int> ivec;
ifstream infile("input2.txt");
while(infile >> n)
ivec.push_back(n);
cout << "Input x: " << endl;
cin >> x;
left = 0;
right = ivec.size();
while(left < right)
{
int mid = (left + right) / 2;
if(ivec[mid] < x)
left = mid + 1;
else if(ivec[mid] > x)
right = mid + 1;
else
{
first = low(ivec, left, right, x);
cout << first << endl;
last = upper(ivec, left, right, x);
break;
}
}
cout << "Numbers: " << last - first << endl;
clock_t endtime = clock();
cout << "Time: " << (double)(endtime - begin) << endl;
}
#include <iostream>
#include <vector>
#include <fstream>
#include <ctime>
using namespace std;
int low(vector<int> &ivec, int left, int right, int x)
{
while(left < right)
{
int mid = (left + right) / 2;
if(ivec[mid] < x)
left = mid + 1;
else
right = mid;
}
return left;
}
int upper(vector<int> &ivec, int left, int right, int x)
{
while(left < right)
{
int mid = (left + right) / 2;
if(ivec[mid] > x)
right = mid;
else
left = mid + 1;
}
return right;
}
int main()
{
clock_t begin = clock();
int n, x, left, right, first = 0, last = 0;
vector<int> ivec;
ifstream infile("input2.txt");
while(infile >> n)
ivec.push_back(n);
cout << "Input x: " << endl;
cin >> x;
left = 0;
right = ivec.size();
while(left < right)
{
int mid = (left + right) / 2;
if(ivec[mid] < x)
left = mid + 1;
else if(ivec[mid] > x)
right = mid + 1;
else
{
first = low(ivec, left, right, x);
cout << first << endl;
last = upper(ivec, left, right, x);
break;
}
}
cout << "Numbers: " << last - first << endl;
clock_t endtime = clock();
cout << "Time: " << (double)(endtime - begin) << endl;
}
相关文章推荐
- 在排序数组中,找出给定数字的出现次数
- 如何在排序数组中,找出给定数字出现的次数
- 如何在排序数组中,找出给定数字出现的次数
- 在排序数组中,找出给定数字的出现次数
- 在排序数组中,找出给定数字的出现次数
- 如何在排序数组中,找出给定数字出现的次数
- 在排序数组中,找出给定数字的出现次数
- 在排序数组中,找出给定数字的出现次数 比如 [1, 2, 2, 2, 3] 中2的出现次数是3次。
- 在排序数组中,找出给定数字的出现次数.比如 [1, 2, 2, 2, 3] 中2的出现次数是3次。
- 在排序数组中,找出给定数字出现的次数。比如【1,2,2,2,3】中2的出现次数为3次
- 在排序数组中,找出给定数字的出现次数,比如 [1, 2, 2, 2, 3] 中2的出现次数是3次。
- 在排序数组中,找出给定数字出现的次数
- 在排序数组中,找出给定数字的出现次数
- 【js实现】在排序数组中,找出给定数字的出现次数,比如 [1, 2, 2, 2, 3] 中2的出现次数是3次
- 每日一道算法题:微软面试题:在排序数组中,找出给定数字出现的次数
- 在排序数组中,找出给定数字的出现次数
- (算法:二分查找)在排序数组中,找出给定数字出现的次数
- [微软面试题] 在排序数组中,找出给定数字的出现次数
- 在排序数组中,找出给定数字的出现次数
- 【二分查找】在排序数组中,找出给定数字的出现次数 以及二分其他应用