【一次写成】查找指定元素在数组中的个数
思路:二分查找第一个出现和最后一个出现的位置,相减得出结果。
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; }
posted on 2020-05-26 10:54 WenjieWangFlyToWorld 阅读(482) 评论(0) 编辑 收藏 举报