解题:
1 暴力
2 双指针
3 但是我们看到升序数组,应该想到二分法
二分查找:
target=k
1 查找第一个出现的k的位置
2 查找第一个大于k的值的位置
熟练上面两种搜索的做法,要注意边界条件。
注意二分查找mid假如是left=right-1,那mid总是偏向left,因此用left去定位,right不断往left靠就可以了。所以注意
left=mid+1;
right=mid;
class Solution {
public:int GetNumberOfK(vector<int> data ,int k) {int n&#61;data.size();if(n&#61;&#61;0) return 0;int left&#61;0,right&#61;n;while(left<right){int mid&#61;left&#43;(right-left)/2;if(data[mid]<k)left&#61;mid&#43;1; elseright&#61;mid;}int lbound&#61;left;left&#61;0,right&#61;n;while(left<right){int mid&#61;left&#43;(right-left)/2;if(data[mid]<&#61;k)left&#61;mid&#43;1;elseright&#61;mid;}int rbound&#61;left;return rbound-lbound;