题目:统计一个数字在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4。
如果遍历数组或二分查找的方法来统计,则不是最简单的方法。可以利用二分查找方法找出K第一次和最后一次出现的index,这样就可以计算出次数了。
代码实现:
public class Solution{ public static int getNumberOfK(int[] arr,int k){ int number=0; if(arr!=null&&arr.length!=0){ int first=getFirstK(arr,k,0,arr.length-1); int last=getLastK(arr,k,0,arr.length-1); if(first>-1&&last>-1){ number=last-first+1; } } return number; } public static int getFirstK(int[] arr,int k,int start,int end){ if(start>end){ return -1; } int middle=(start+end)/2; if(arr[middle]==k){ if((middle>0&&arr[middle-1]!=k)||middle==0){ return middle; }else{ end=middle-1; } }else if(arr[middle]>k){ end=middle-1; }else{ start=middle+1; } return getFirstK(arr,k,start,end); } public static int getLastK(int[] arr,int k,int start,int end){ if(start>end){ return -1; } int middle=(start+end)/2; if(arr[middle]==k){ if((middle<arr.length-1&&arr[middle+1]!=k)||middle==arr.length-1){ return middle; }else{ start=middle+1; } }else if(arr[middle]>k){ end=middle-1; }else{ start=middle+1; } return getLastK(arr,k,start,end); } public static void main(String[] args){ int[] arr={1,2,3,3,3,3,4,5}; int times=getNumberOfK(arr,3); System.out.println(times); } }
posted on
浙公网安备 33010602011771号