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

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

统计一个数字在排序数组中出现的次数。

首先吐槽下出题人的用词,啥叫排序数组?“排序”是个动词好么,“有序”作为一个形容词表示状态,修饰“数组”,才是合适的。

题目考察二分查找,首先找到指定数字最先出现的位置,然后找到最后出现的位置,他们的距离+1就是个数。

class Solution14{public:    int GetNumberOfK(vector
data, int k){ if (data.empty()){ return 0; } int first = GetFirstIndex(data, k, 0, data.size() - 1); int last = GetLastIndex(data, k, 0, data.size() - 1); if (first > -1 && last > -1){ return last - first + 1; } return 0; } int GetFirstIndex(vector
& data, int k, int start, int end){ if (start > end) return -1; int mid = start + (end - start) / 2; if (data[mid] == k){ if (mid == start || data[mid-1]!=k){ return mid; } else{ end = mid - 1; } } else{ if (data[mid]>k){ end = mid - 1; } else{ start = mid + 1; } } return GetFirstIndex(data, k, start, end); } int GetLastIndex(vector
& data, int k, int start, int end){ if (start > end) return -1; int mid = start + (end - start) / 2; if (data[mid] == k){ if (mid == end || data[mid + 1] != k){ return mid; } else{ start = mid + 1; } } else{ if (data[mid]>k){ end = mid - 1; } else{ start = mid + 1; } } return GetLastIndex(data, k, start, end); }};

转载地址:http://jxjoo.baihongyu.com/

你可能感兴趣的文章
浙江仙居“土味”民俗迎中国年:留住乡愁记忆
查看>>
Google发布TensorFlow r1.4
查看>>
解析Google最新“移动实时视频分割”技术
查看>>
“锤子科技2017春季新品发布会”能否带领罗永浩度过难关?
查看>>
Vue 脱坑记 - 查漏补缺(汇总下群里高频询问的xxx及给出不靠谱的解决方案)
查看>>
校招那些坑,是我走过最长的路
查看>>
OceanBase 2.0让百万支付不是梦?
查看>>
『Material Design入门学习笔记』TabLayout与NestedScrollView(附demo)
查看>>
Xcode9下自动化编译错误
查看>>
UCloud首尔机房整体热迁移是这样炼成的
查看>>
Dopamine - 灵活、可重复的强化学习研究新框架
查看>>
独立开发者赚钱之道 - 订阅制内购
查看>>
春夏秋冬又一春之Redis持久化
查看>>
[iOS 10 day by day] Day 6:自定义的通知界面
查看>>
Cookie 和 Session 关系和区别
查看>>
CoreFoundation CFRuntimeBase下的_cfinfo[4]存储信息探究
查看>>
学习记录——盒模型
查看>>
Swift语音和文本的转换
查看>>
Array方法汇总
查看>>
flex布局
查看>>