统计一个数字在排序数组中出现的次数。
示例 1:
输入: nums = [5,7,7,8,8,10], target = 8
输出: 2
示例 2:
输入: nums = [5,7,7,8,8,10], target = 6
输出: 0
方法一、
直接循环判断,与target相等数量加一
public int search(int[] nums, int target) {
int count = 0;
for (int num : nums) {
if(num == target){
count++;
}
}
return count;
}
方法二、
使用二分法获取查找目标值的下标
第一次获取第一个大于target-1在数组中的下标
第二次获取第一个大于target在数组中的下标
最后将两次获取到的差值为数字在排序数组中出现的次数。
private int search2(int[] nums, int target) {
//获取第一个大于target-1在数组中的下标
int leftIndex = getIndex(nums, target-1);
//获取第一个大于target在数组中的下标
int rightIndex = getIndex(nums, target);
//中间的差值就是target在数组中的个数
return rightIndex - leftIndex;
}
/**
* 通过二分法查找目标值的下标
* @param nums nums
* @param target target
* @return int
*/
private int getIndex(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
int mid;
while(left <= right){
mid = (left + right) / 2;
if(nums[mid] > target){
right = mid - 1;
}else if(nums[mid] <= target){
left = mid + 1;
}
}
return left;
}