java 二分搜索变种
数字在升序数组中出现的次数
http://www.nowcoder.com/questionTerminal/70610bf967994b22bb1c26f9ae901fa2
public class Solution { public static int GetNumberOfK(int [] array , int k) { // right为大于k的第一位 int right = b_search(array, k); // left为大于k-1的第一位,实际上就是等于k的第一位(若存在等于k),不存在k的话就和right一样了 int left = b_search(array, k-1); System.out.println(right); System.out.println(left); return right - left; } private static int b_search(int[] array, int k){ // 这里j一定要设为数组长度, 这样在数组中存在k时,仍然可以返回大于k的第一位 // 要是设置为array.length-1,那么当数组中存在k时,返回的是等于k的最后一位,而不是大于k的第一位 int i = 0, j = array.length; // 同时终止条件为i == j while(i < j){ // mid 向下取整 int mid = i + (j - i) / 2; if(array[mid] <= k){ i = mid + 1; }else{ j = mid; } } // 返回的是大于k的第一位,若数组中不存在,就是数组的最后一位加一 return i; } }