剑指offer——53. 数字在排序数组中出现的次数

53. 数字在排序数组中出现的次数

NowCoder

题目描述

1
2
3
4
5
6
Input:
nums = 1, 2, 3, 3, 3, 3, 4, 6
K = 3

Output:
4

解题思路

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <unordered_map>
class Solution {
public:
//二分
int getNumberOfK(vector<int>& nums , int k) {
if(nums.empty()) return 0;
//0--找左端点
int l =0, r = nums.size() - 1;
while(l < r)
{
int mid = l + r >>1;
if(nums[mid] < k) l = mid +1;
else r = mid;
}
//此时找到值为k的左端点 l = r
if(nums[l] != k) return 0; //判断是否存在k
int left = l;

//--找右端点
l =0, r = nums.size() - 1;
while(l < r)
{
int mid = l + r + 1>>1;
if(nums[mid] <= k) l= mid;
else r = mid - 1;
}

return r - left + 1;
}

//hash On
int getNumberOfK1(vector<int>& nums , int k) {
unordered_map<int, int> hash;
for(auto x : nums)
{
hash[x] ++;
}
return hash[k];
}
};
创作不易,欢迎打赏!
-------------本文结束感谢您的阅读-------------