zoukankan      html  css  js  c++  java
  • 数字在排序数组中出现的次数

    采用二分查找的方法,一旦找到,left++,right--,--middle++,扩展查找。

    开始while(left<right),当n=1时不能进入循环,应写while(left<=right)

     1 class Solution {
     2 public:
     3     int GetNumberOfK(vector<int> 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<n){
    13                     left++;
    14                     count++;
    15                 }
    16                 return count;
    17             }
    18             if(data[right]==k){
    19                 while(data[right]==k&&right>=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<n){
    35                     m++;
    36                     count++;
    37                 }
    38                 return count;
    39             }
    40             if(data[middle]>k)
    41                 right=middle-1;
    42             else
    43                 left=middle+1;
    44         }
    45         return count;
    46     }
    47 };
  • 相关阅读:
    oo第三单元学习总结
    oo第二单元学习总结
    OO第四单元UML作业总结兼OO课程总结
    OO第三单元JML作业总结
    OO第二单元电梯作业总结
    OO第一单元总结
    OOUnit4Summary
    OOUnit3Summary
    OOUnit2Summary
    OOUnit1Summary
  • 原文地址:https://www.cnblogs.com/zl1991/p/4777101.html
Copyright © 2011-2022 走看看