数据结构与算法是计算机发展的基石,现代计算机的起源是数学,数学的核心是算法,计算机历史上每一次大的变革都离不开算法的推动。纵然“条条大路通罗马”,但好的算法永远比提高硬件设备管用。
在排序数组中,找出给定数字出现的次数
在排序数组中,找出给定数字出现的次数。如,【1,2,2,2,3】中2出现的次数是3次。。。
简单粗暴的方法是从头到尾遍历一遍,用个计数器进行计数,统计2出现的次数。
优化方法:该问题在二分查找的基础上进行改进。设数组array为递增序列,需要查找的元素为findData,为了求解给定数字出现的次数,可以分别寻找findData在array中最先出现的位置和最后出现的位置,通过两者的算术运算即可获得该数字的出现次数。编码的时候,用变量last来存储本次查找到的位置,然后根据情况变换查找方向,就可以分别确定最先出现的位置的下标left和最后出现的位置下标right的值。
#include<iostream>
using namespace std;
int BinarySearch( int *a, int length, int num, bool isLeft )
{
int left = 0;
int right = length - 1 ;
int last = 0;
while( left <= right )
{
int mid = ( left + right ) /2;
if( a[mid] < num )
{
left = mid+1;
}
else if( a[mid] > num )
{
right = mid - 1;
}
else
{
last = mid;
if( isLeft ) right = mid-1;
else left = mid + 1;
}