题目描述

统计一个数字在升序数组中出现的次数。

  1. public class Solution {
  2. public int GetNumberOfK(int [] array , int k) {
  3. int count = 0;
  4. // 二分查找
  5. int l = 0, r = array.length - 1;
  6. while(l<=r){
  7. int mid = l + (r-l)/2;
  8. int curr = array[mid];
  9. if(curr==k){
  10. count = sum(array,mid,k); // 统计个数
  11. break;
  12. }else if(k<curr){
  13. r = mid - 1;
  14. }else{
  15. l = mid + 1;
  16. }
  17. }
  18. return count;
  19. }
  20. public int sum(int[] array, int mid, int k){
  21. int count = 0;
  22. for(int i=mid;i>=0&&array[i]==k;i--){
  23. count++;
  24. }
  25. for(int i=mid+1;i<array.length&&array[i]==k;i++){
  26. count++;
  27. }
  28. return count;
  29. }
  30. }