涉及的知识点
数组、二分
题目描述
统计一个数字在升序数组中出现的次数。
输入
[1,2,3,3,3,3,4,5],3
返回值
4
解题思路一
暴力解法
代码
public class Solution {
public int GetNumberOfK(int [] array , int k) {
int num = 0;
for(int i =0;i<array.length;i++){
if(array[i]==k){
++num;
}
}
return num;
}
}
复杂度分析
时间复杂度:O(n)
空间复杂度:O(1)
解题思路二
头尾指针,当左右指针都不等于目标值时停止,个数就等于右指针-左指针+1
有问题代码
public class Solution {
public int GetNumberOfK(int [] array , int k) {
int left = 0;
int right = array.length-1;
while(left<right){
if(array[left]!=k){
left++;
}
if(array[right]!=k){
right--;
}
if(array[left]==k&&array[right]==k){
return right-left+1;
}
}
return 0;
}
}
*** 上述代码有一个小问题,就是当数组中只有一个的时候会输出0。***
正确代码如下:
public class Solution {
public int GetNumberOfK(int [] array , int k) {
if(array.length==0){
return 0;
}
if(array.length==1){ //这里忘考虑了
if(array[0]==k){
return 1;
}else{
return 0;
}
}
int left = 0;
int right = array.length-1;
while(left<right){
if(array[left]!=k){
left++;
}
if(array[right]!=k){
right--;
}
if(array[left]==k&&array[right]==k){
return right-left+1;
}
}
return 0;
}
}
复杂度分析
时间复杂度:O(n)
空间复杂度:O(1)