当前位置:   article > 正文

在有序数组中,统计某一元素出现的次数_统计有序数组里出现的次数c语言

统计有序数组里出现的次数c语言

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

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

C程序实现:

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

  1. int findCount(int a[],int len ,int key)
  2. {
  3. int i,count = 0;
  4. for(i=0;i<len;i++)
  5. {
  6. if(key==a[i])
  7. count++;
  8. }
  9. return count;
  10. }

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

  1. int BinarySort(int a[],int len, int key, bool isLeft)
  2. {
  3. int left = 0, right = len -1;
  4. int last = 0 ; // 记录下标
  5. while(left<=right)
  6. {
  7. int mid = (left + right)/2;
  8. if(a[mid]<key)
  9. {
  10. left = mid + 1;
  11. }
  12. else if(a[mid]>key)
  13. {
  14. right = mid -1;
  15. }
  16. else
  17. {
  18. last = mid ;
  19. if(isLeft) // 该值在mid左边还有时
  20. {
  21. right = mid - 1;
  22. }
  23. else
  24. {
  25. left = mid + 1;
  26. }
  27. }
  28. }
  29. // if (last>0)
  30. // return last;
  31. // else
  32. // return -1;
  33. return last>0?last:-1;
  34. }


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/331355
推荐阅读
相关标签
  

闽ICP备14008679号