采用二分查找的方法,一旦找到,left++,right--,--middle++,扩展查找。
开始while(left<right),当n=1时不能进入循环,应写while(left<=right)
1 class Solution { 2 public: 3 int GetNumberOfK(vector data ,int k) { 4 int n=data.size(); 5 if(n<1) return 0; 6 int left=0; 7 int right=n-1; 8 int middle=0; 9 int count=0;10 while(left<=right){11 if(data[left]==k){12 while(data[left]==k&&left=0){20 right--;21 count++;22 }23 return count;24 }25 middle=left+(right-left)/2;26 if(data[middle]==k){27 count++;28 int m=middle-1;29 while(data[m]==k&&m>=0){30 m--;31 count++;32 }33 m=middle+1;34 while(data[m]==k&&m k)41 right=middle-1;42 else43 left=middle+1;44 }45 return count;46 }47 };