题目描述
描述转载自力扣 https://leetcode-cn.com/problems/zai-pai-xu-shu-zu-zhong-cha-zhao-shu-zi-lcof/ 与牛客题一致
统计一个数字在排序数组中出现的次数。
示例1
输入: nums = [5,7,7,8,8,10], target = 8
输出: 2
示例2
输入: nums = [5,7,7,8,8,10], target = 6
输出: 0
解题思路
- 使用二分法找到数组中的 target;
- 找到之后往前遍历数组,直到遍历到的值不等于 target;
- 最后再往后遍历数组,每遍历到一个值就增加一次次数,直到遍历的值不等于 target。
Java代码实现
class Solution {
public int search(int[] nums, int target) {
if (nums.length == 1 && nums[0] == target) return 1;
// 二分查找
int index = binSearch(nums, 0, nums.length - 1, target);
// 如果没有找到对应的值,返回 0
if (index == -1) return 0;
// 因为找到的 index 的前面也可能有 target,所以往前遍历,找到数组中第一个与 target 相等的数
while (index >= 0 && nums[index] == target) {
--index;
}
++index;
int res = 0;
// 从第一个 target 往后遍历,并增加次数,直到数组元素不等于 target
while (index < nums.length && nums[index] == target) {
++res;
++index;
}
return res;
}
private int binSearch(int[] nums, int left, int right, int target) {
while (left <= right) {
int mid = (left + right) >> 1;
if (nums[mid] == target) return mid;
else if (nums[mid] > target) right = mid - 1;
else left = mid + 1;
}
return -1;
}
} 
京公网安备 11010502036488号