以下面的例子为例
题目
统计一个数字在排序数组中出现的次数。
示例
输入: nums = [5,7,7,8,8,10], target = 8 输出: 2
输入: nums = [5,7,7,8,8,10], target = 6 输出: 0
解题
class Solution {
public int search(int[] nums, int target) {
int begin=getNum(nums,target);
int end=getNum(nums,target+1);
return end-begin;
}
public int getNum(int[] nums,int target){
int left=0;
int right=nums.length-1;
while(left<=right){
int mid=(left+right)/2;
if(nums[mid]>=target){
right=mid-1;
}else{
left=mid+1;
}
}
return left;
}
}
思路
1、看到排好序的,优先想到二分法
2、按照以上二分法规范写,left都会落在while中的if判断中,包含相等条件的那个值的左端一位的位置(这种方法适用于给定一个位置,在进行判断的)。
以上面的getNum()方法为例,当输入[5,7,7,8,8,10]和7时,left会停在if条件包含等号的左一位,也就是说,left停在了7的左一位,8的索引下标上。