排序数组输出指定数字个数
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;
}
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;
}
相关文章推荐
- c语言排序后删除数组中重复的数字再排序输出
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- 程序员面试题目总结--数组(三)【旋转数组的最小数字、旋转数组中查找指定数、两个排序数组所有元素中间值、数组中重复次数最多的数、数组中出现次数超过一半的数】
- 在一个排序数组中,输出给定数字出现的次数
- 第一周第四天([大小写变换问题][判断是否为email][求对角线的值] [生成数组][数字中添加逗号][生成10个两位随机数,然后再进行排序] [复制数组||将指定数组的指定范围复制到新的数组])
- 一个一维整形数组,若干个数字,统计数组中不同的数字出现的次数,并按照出现频率从小到大排序输出,相同频率按数字大小排序输出
- 题目:输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。 要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。 例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,
- 利用可变数组将用户输入数字排序后输出
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- 给一个整数数组,对数组中的每个整数中的所有数字按照升序排列(如101排序后为011)请写一个方法,输出排序后的数组中的最大数。 例如有一个数组: 101、132、375,排序后11、123、357,
- c++之数组篇1:对排序数组找出指定数字出现的次数
- 剑指Offer:指定数字在排序数组中出现的次数
- 【C语言】求旋转数组的最小数字,输入一个递增排序的数组的一个旋转,输出其最小元素
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- 作业-创建数组随机生成30个不重复数字进去-在随机出来5个-然后排序输出
- 去掉排序数组中重复的数字
- 剑指Offer——(37)数字在排序数组中出现的次数
- 统计一个数字在排序数组中出现的次数。