二分法解决数字在有序数组出现的次数
数字在升序数组中出现的次数
http://www.nowcoder.com/questionTerminal/70610bf967994b22bb1c26f9ae901fa2
其实也可以用暴力解法,但是时间复杂度为O(N)
用二分法后,其实时间复杂度也为 O(NlogN) + O(N) = O(N)
public class Solution { public int GetNumberOfK(int [] array , int k) { if(array.length == 0 || k < array[0] || k > array[array.length-1]){ return 0; } int left = 0, right = array.length - 1; int mid = 0; int count = 0; while(left <= right){ mid = (left + right) / 2; if(array[mid] > k){ right = mid-1; }else if(array[mid] < k){ left = mid + 1; }else{ count++; break; } } int pre = mid - 1; int foll = mid + 1; //统计这个mid左侧 while(pre >= left){ if(array[pre] == k){ count++; pre--; }else{ break; } } //统计这个mid右侧 while(foll <= right){ if(array[foll] == k){ count++; foll++; }else{ break; } } return count; } }