力扣链接:https://leetcode-cn.com/problems/zai-pai-xu-shu-zu-zhong-cha-zhao-shu-zi-lcof/
题目描述
统计一个数字在排序数组中出现的次数。
思路:两次二分查找
分别查找最后一个比target小的元素和第一个比target大的元素
代码:
/** * @param {number[]} nums * @param {number} target * @return {number} */ var search = function(nums, target) { if(!nums.length) return 0; if(nums.length === 1) return target===nums[0] ? 1 : 0; let leftBound = -1, rightBound = nums.length; //找左边界 let start = 0, end = nums.length-1; while(start + 1 < end){ const mid = parseInt((start + end) / 2); if(nums[mid] < target){ start = mid; }else{ end = mid; } } if(nums[start] !== target){ leftBound = start; } //找右边界 start = leftBound; end = nums.length-1; while(start + 1 < end){ const mid = parseInt((start + end) / 2); if(nums[mid] > target){ end = mid; }else{ start = mid; } } if(nums[end] !== target){ rightBound = end; } return rightBound - leftBound - 1; };
时间复杂度:O(logN)
空间复杂度:O(1)
易错:
注意特殊用例:[2,2,2], [1,2,2,2], [2,2,2,5]
原文:https://www.cnblogs.com/xintangchn/p/13228014.html