题目描述
统计一个数字在排序数组中出现的次数。
题解一:循环
1 public static int GetNumberOfK(int [] array , int k) { 2 if(array.length==0){ 3 return 0; 4 } 5 int count=0; 6 for(int i=0;i<array.length;i++){ 7 if(array[i]==k){ 8 count++; 9 } 10 } 11 return count; 12 }
题解二:二分法
1 //因为data中都是整数,所以可以稍微变一下,不是搜索k的两个位置,而是搜索k-0.5和k+0.5 2 //这两个数应该插入的位置,然后相减即可。 3 public static int GetNumberOfK01(int [] array , int k) { 4 if(array == null || array.length == 0) { 5 return 0; 6 } 7 return biSearch(array, k + 0.5) - biSearch(array, k - 0.5); 8 } 9 private static int biSearch(int [] array, double k){ 10 int low = 0, high = array.length - 1; 11 while(low <= high){ 12 int mid = low + (high -low) / 2; 13 if(array[mid] > k) { 14 high = mid - 1; 15 } else{ 16 low = mid + 1; 17 } 18 } 19 return low; 20 }
测试:
1 public static void main(String[] args) { 2 int[] array={3,3,3,3,4,5}; 3 int k=3; 4 int numberOfK= GetNumberOfK01(array, k); 5 System.out.println(numberOfK); 6 } 7 输出:4
原文地址:https://www.cnblogs.com/Blog-cpc/p/12443249.html
时间: 2024-10-29 02:28:08