博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【剑指offer】数字在排序数组中出现的次数,C++实现
阅读量:5750 次
发布时间:2019-06-18

本文共 1726 字,大约阅读时间需要 5 分钟。

原创博文,转载请注明出处!

# 题目

# 思路

      利用二分查找法,查找元素k在排序数组中第一次出现的位置m及最后一次出现的位置n,m-n+1即为元素k再排序数组中出现的次数。

      二分查找法在数组中找到第一个k的思路:先拿数组中间元素mid和查找元素k比较,如果k<mid,则第一个k只可能出现在数组的前半段;如果k>mid,则第一个k只可能出现在数组的后半段;如果k=mid,则先判断中间元素是不是第一个k(如果mid前的元素不是k,则中间元素是第一个k;如果mid前的元素是k,则第一个k出现在数组的前半段。

      二分查找法在数组中找到最后一个k的思路:先拿数组中间元素mid和查找元素k比较,如果k<mid,则最后一个元素k只可能出现在数组的前半段;如果k>mid,则最后一个元素k只可能出现在数组的后半段;如果k=mid,则先判断中间元素是不是最后一个k(如果mid后的元素不是k,则中间元素是最后一个k;如果mid后的元素是k,则最后一个k出现在数组的后半段。

# 代码

1 #include 
2 #include
3 using namespace std; 4 5 class Solution { 6 public: 7 // 查找元素k在有序数组中出现的次数 8 int GetNumberOfK(vector
data ,int k) 9 { 10 // 特殊输入 11 if(data.size() == 0) 12 return 0; 13 cout<
<
data,int k,int l,int r) 33 { 34 // 递归出口 35 if(l>r) 36 return -1; 37 38 int mid = (l+r)>>1; 39 40 if(k
data[mid]) 45 { 46 l = mid+1; 47 } 48 else 49 { 50 if((mid>0 && data[mid-1] != k) || mid == 0) 51 return mid; 52 else 53 r = mid-1; 54 } 55 return GetFirstK(data,k,l,r); 56 } 57 58 // 二分查找法,查找最后一个k的位置 59 int GetLastK(vector
data,int k,int l,int r) 60 { 61 if(l>r) 62 return -1; 63 64 int mid = (l+r)>>1; 65 66 if(k
data[mid]) 69 l = mid+1; 70 else 71 { 72 if((mid < data.size()-1 && data[mid+1]!=k) || mid == data.size()-1) 73 return mid; 74 else 75 l = mid+1; 76 } 77 return GetLastK(data,k,l,r); 78 } 79 }; 80 int main() 81 { 82 cout << "二分查找法计算数字k在排序数组中出现的次数" << endl; 83 // 空数组 84 vector
arr1; 85 // 数组中不包含查找的数字 86 vector
arr2 = {1,3,5,7,9,10}; 87 // 数组中包含查找的数组(出现一次) 88 vector
arr3 = {1,2,2,2,2,3,3,3,4,5}; 89 // 数组中包含查找的数组(出现多次) 90 vector
arr4 = {1,2,3,4,4,4,7,8,9,10}; 91 Solution solution; 92 cout<
<

转载于:https://www.cnblogs.com/wanglei5205/p/8908340.html

你可能感兴趣的文章
linux命令学习(1)-awk
查看>>
ActionBar中SearchView创建的2种方式
查看>>
一个简单的接口,被调用并同步给出响应的方法
查看>>
rhel7.2使用lvm安装虚拟机
查看>>
公司网络很慢很卡的原因分析与处理
查看>>
Hadoop序列化与压缩
查看>>
由“男怕入错行”说开去
查看>>
php-fpm多实例运行
查看>>
MySQL数据库安装
查看>>
CGImageSource对图像数据读取任务的抽象
查看>>
我的友情链接
查看>>
xss test
查看>>
也谈svn分支与合并
查看>>
显式锁(第十三章)
查看>>
微软超融合私有云测试29-SCDPM2016部署之创建保护组备份(备份虚拟机)
查看>>
LBS“他爹”GIS
查看>>
同质化倾向的互联网金融 玖富带来了温度与色彩
查看>>
谷歌两算法推出后网站用户体验显得尤为重要
查看>>
linux命令技巧
查看>>
关于ifram/frameset内嵌网页页面表单的跳转以及ajax请求的跳转
查看>>