在有序数组中,统计某一元素出现的次数

来源:互联网 发布:淘宝3个月没卖出一件 编辑:程序博客网 时间:2024/05/16 06:25

题目:在排序数组中,找出给定元素出现的次数。

例如:有序数组[1,2,3, 4, 5, 5, 5, 5,6,7,8]中,5出现的次数为4次。

C程序实现:

1.直接比较统计,O(N)的时间复杂度。

int findCount(int a[],int len ,int key){int i,count = 0;for(i=0;i<len;i++){if(key==a[i])count++; } return count;}

2.利用二分查找,分别找出最先出现和最后出现的位置,再统计出现的次数即可,时间复杂度为O(logN)。

int BinarySort(int a[],int len, int key, bool isLeft){int left = 0, right = len -1;int last = 0 ;                                            // 记录下标 while(left<=right){ int mid = (left + right)/2;if(a[mid]<key){left = mid + 1;}else if(a[mid]>key){right = mid -1;}else{last = mid ;if(isLeft)// 该值在mid左边还有时 {right = mid - 1;            }else{left = mid + 1;}}}//if (last>0)//return last;//else //return -1; return last>0?last:-1;}


1 0
原创粉丝点击