题目
统计一个数字在排序数组中出现的次数。
示例 1:
输入: nums = [5,7,7,8,8,10], target = 8
输出: 2
示例 2:
输入: nums = [5,7,7,8,8,10], target = 6
输出: 0
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zai-pai-xu-shu-zu-zhong-cha-zhao-shu-zi-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解
两次二分,分别查找第一个等于target的索引,和最后一个等于target的索引。
代码
class Solution { public int search(int[] nums, int target) { int firstPos = searchFirst(nums, target); int lastPos = searchLast(nums, target); return firstPos == -1? 0 : lastPos - firstPos + 1; } private int searchFirst(int[] nums, int target){ int l = 0; int r = nums.length - 1; while(l <= r){ int mid = l + (r - l) / 2; if(nums[mid] == target){ r = mid - 1; }else if(nums[mid] > target){ r = mid - 1; }else{ l = mid + 1; } } return l != nums.length && nums[l] == target ? l : -1; } private int searchLast(int[] nums, int target){ int l = 0; int r = nums.length - 1; while(l <= r){ int mid = l + (r - l) / 2; if(nums[mid] == target){ l = mid + 1; }else if(nums[mid] > target){ r = mid - 1; }else{ l = mid + 1; } } return r != -1 && nums[r] == target ? r : -1; } }
来源:https://www.cnblogs.com/coding-gaga/p/12364667.html