JZ37 数字在排序数组中出现的次数
数字在排序数组中出现的次数
http://www.nowcoder.com/questionTerminal/70610bf967994b22bb1c26f9ae901fa2
解法一:手写二分法查找
public class Solution { public int GetNumberOfK(int [] array , int k) { if(array==null||array.length==0) return 0; int p=find(array, k, 0, array.length-1); if(p==-1) return 0; int q=p; int ans=1; while(p-1>=0&&array[p-1]==array[p]) {ans++;p--;} while(q+1<=array.length-1&&array[q]==array[q+1]) {ans++;q++;} return ans; } int find(int[] array, int k, int l, int r){ if(l==r&&array[l]!=k) return -1;//单独删除这一行 会有数组越界问题 if(l+1==r&&array[l]!=k&&array[r]!=k) return -1;;//单独删除这一行 会有数组越界问题 int m=(l+r)/2; if(array[m]==k) return m; if(array[m]<k) return find(array, k, m, r); return find(array, k, l, m); } }
解法二:库函数binarySearch
import java.util.Arrays; public class Solution { public int GetNumberOfK(int [] array , int k) { int index = Arrays.binarySearch(array, k); if(index<0)return 0; int ans = 1; for(int i=index+1; i < array.length && array[i]==k; i++) ans++; for(int i=index-1; i >= 0 && array[i]==k; i--) ans++; return ans; } }