剑指offer(牛客)---36.数字在排序数组中出现的次数
程序员文章站
2024-03-20 12:59:52
...
题目描述
统计一个数字在排序数组中出现的次数。
public class Solution {
public int GetNumberOfK(int [] array , int k) {
if(array==null||array.length==0)
return 0;
int first=getFirstK(array,k,0,array.length-1);
int last=getLastK(array,k,0,array.length-1);
if(first==-1 ||last==-1){
return 0;
}
else{
return last-first+1;
}
}
public int getFirstK(int[] array,int k,int start,int end){
while(start<=end){
int mid=(start+end)/2;
if(k<array[mid])
end=mid-1;
else if(k>array[mid])
start=mid+1;
else{
if((mid>0&&array[mid-1]!=k)||mid==0)
return mid;
else{
end=mid-1;
}
}
}
return -1;
}
public int getLastK(int[] array,int k ,int start,int end){
while(start<=end){
int mid=(start+end)/2;
if(k<array[mid])
end=mid-1;
else if(k>array[mid])
start=mid+1;
else{
if((mid<array.length-1&&array[mid+1]!=k)||mid==array.length-1)
return mid;
else{
start=mid+1;
}
}
}
return -1;
}
}
这道题的解题思路:在一个有序数组中,找到第一次出现的k,找到最后一次出现的k,因为是有序的,所以k出现的次数就是last-start+1;
在各自搜索的时候,基本上采用二分法,这个就没啥可讲的了。
推荐阅读
-
剑指offer(牛客)---36.数字在排序数组中出现的次数
-
剑指offer | 数字在排序数组中出现的次数
-
数字在排序数组中出现的次数(二分查找法)——剑指Offer
-
剑指offer:数字在排序数组中出现的次数(二分查找 leetcode 34)
-
剑指offer-37-数字在排序数组中出现的次数(二分查找) -- Java实现
-
剑指offer——数字在排序数组中出现的次数(复习二分)
-
剑指offer 56 数组中数字出现的次数 lintcode 82. 落单的数、83. 落单的数 II、84. 落单的数 III
-
牛客剑指offer第四十题(数组中只出现一次的数字)
-
牛客之数字在排序数组中出现的次数
-
python--剑指offer--中等--56 - II. 数组中数字出现的次数 II