1.题目:
在排序数组中查找数字 I
统计一个数字在排序数组中出现的次数。
示例 1:
输入: nums = [5,7,7,8,8,10], target = 8
输出: 2
示例 2:
输入: nums = [5,7,7,8,8,10], target = 6
输出: 0
来源:剑指 Offer 53 - I. 在排序数组中查找数字 I
2.解题思路:
①采用暴力解法,直接遍历得到结果:
class Solution {
public int search(int[] nums, int target) {
int res = 0;
for(int i = 0;i < nums.length;i++)
{
if (nums[i] == target)
{
res++;
}
}
return res;
}
}
②采用二分查找法:因为是排序后的数组因此可以利用这一条件进行二分查找,找target元素第一次出现的位置,没有找到直接返回0;若成功找到再向后遍历直到target元素最后一次出现。
class Solution {
public int search(int[] nums, int target) {
int n = nums.length;
if (n == 0) return 0;
int left = 0, right = nums.length - 1;
int mid = 0;
while (left < right)
{
mid = left + (right - left)/2;
if (nums[mid] < target)
{
//在[mid+1,right]范围内查找
left = mid + 1;
}
else if(nums[mid] == target)
{
//在[left,mid]范围内查找
right = mid;
}
else
{
//在[left,mid-1]
right = mid - 1;
}
}
if (nums[left] == target)
{
int firstappear = left;
while(++left < n && nums[left]==target)
{ }
return left - firstappear;
}
else
{
return 0;
}
}
}