【一次写成】查找指定元素在数组中的个数

思路:二分查找第一个出现和最后一个出现的位置,相减得出结果。

public
int findNumTimes(int[] arr ,int num){ if(arr == null || arr.length == 0 || num<arr[0] || num>arr[arr.length-1]){ return 0; }   int indexFirst = findKey(arr, num, true);   if(indexFirst<0){ return 0; }   int indexLast = findKey(arr, num, false);   return indexLast - indexFirst + 1;   } //flag: true 第一次出现,false 最后一次出现 public int findKey(int[] arr, int num, boolean flag){ int left = 0, right = arr.length-1, mid = 0; if(arr[0] == num && flag){ return 0; }   if(arr[arr.length-1] == num && !flag){ return arr.length-1; }   while(left<=right){ mid = (left+right)/2; if(flag){ if(mid-1>=0 && arr[mid]==num && arr[mid-1]<num){ return mid; }   if(arr[mid]==num || arr[mid]>num){ right=mid-1; }else{ left = mid+1; } }else{ if(mid+1<arr.length && arr[mid]==num && arr[mid+1]>num){ return mid; }   if(arr[mid]==num || arr[mid]<num){ left=mid+1; }else{ right = mid-1; } } }   return -1; }

猜你喜欢

转载自www.cnblogs.com/wwjldm/p/12964164.html