public class Solution {
public int GetNumberOfK(int[] array, int k) {
int left = findFirstK(array, 0, array.length-1, k);
int right = findLastK(array, 0, array.length-1, k);
if(left==-1||right==-1){
return 0;
}else{
return right-left+1;
}
}
private int findFirstK(int[] array, int left, int right, int k){
if(left>right){
return -1;
}else if(left==right && array[left]==k){
return left;
}
int mid = (left+right)/2;
if(array[mid]==k) {
if ((mid > 0 && array[mid - 1] != k) || mid == 0) {
return mid;
}
right = mid - 1;
}else if(array[mid]<k){
left = mid+1;
}else{
right = mid-1;
}
return findFirstK(array, left, right, k);
}
private int findLastK(int[] array, int left, int right, int k){
if(left>right){
return -1;
}else if(left==right && array[left]==k){
return left;
}
int mid = (left+right)/2;
if(array[mid]==k) {
if ((mid < array.length-1 && array[mid + 1] != k) || mid == array.length-1) {
return mid;
}
left = mid + 1;
}else if(array[mid]<k){
left = mid+1;
}else{
right = mid-1;
}
return findLastK(array, left, right, k);
}
}
面试题38:数字在排序数组中出现的次数
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 题目:统计一个数字在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个...
- 题目描述 统计一个数字在排序数组中出现的次数 例如,输入排序数组 {1,2,3,3,3,3,4,5} 和数字 3,...
- 题目:统计一个数字:在排序数组中出现的次数。 代码如下: 来源:http://blog.csdn.net/derr...
- 题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2...