c_cpp 计算已排序数组中的出现次数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 计算已排序数组中的出现次数相关的知识,希望对你有一定的参考价值。

/*
http://ideone.com/RiTLHk
http://www.geeksforgeeks.org/count-number-of-occurrences-in-a-sorted-array/
http://www.practice.geeksforgeeks.org/problem-page.php?pid=577
https://www.hackerearth.com/notes/searching-code-monk/
*/

#include <iostream>
#include <string>
#include <vector>
using namespace std; 

int firstOccurence(int a[], int left, int right, int item){
	int mid;
	while(right - left > 1){
		mid = left + (right - left) / 2;
		if(a[mid] >= item)
			right = mid;
		else
			left = mid;
	}
	return right;
}
int lastOccurence(int a[], int left, int right, int item){
	int mid;
	while(right - left > 1){
		mid = left + (right - left) / 2;
		if(a[mid] <= item)
			left = mid;
		else
			right = mid;
	}
	return left;
}
int main() {
	int t, n, item;
	cin >> t;
	while(t--){
		cin >> n >> item;
		int a[501];
		for(int i=0; i<n; i++)
			cin >> a[i];
		int first = firstOccurence(a, -1, n-1, item);
		int last = lastOccurence(a, 0, n, item);
		
		int count = 0;
		if (a[first] == item && a[last] == item) 
			count = last - first + 1;
		else
			count = 0;
			
		if(count == 0)
			cout << -1 <<endl;
		else
			cout << count << endl;
	}
	return 0;
}

以上是关于c_cpp 计算已排序数组中的出现次数的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 查找已排序数组中给定数字的出现次数

c_cpp 在已旋转未知次数的n个整数的递增顺序排序数组中查找元素。 #searching #CtCI

c_cpp 使用后缀数组计算给定文本中子字符串的出现次数

c_cpp 搜索已排序和旋转的数组中的元素

数字在排序数组中出现的次数

C语言 怎么计算数组中每一个不同元素出现的次数