剑指offer-面试题38 : 数字在排序数组中出现的次数
来源:互联网 发布:剑罗数据 编辑:程序博客网 时间:2024/06/03 09:45
//如果直接遍历数组,则时间复杂度是O(n);//如果用二分法分别找出第一次出现的位置和最后一次的位置,再相减,时间复杂度就是O(log(n));#include<iostream>using namespace std;int GetFirstK(int Array[], int length, int K, int start, int end){ if(Array == NULL || length <= 0 || start<0 || end<0 || start>end) return -1; int mid = (start+end)/2; int midData = Array[mid]; if(midData == K) { if((mid > 0 && Array[mid-1] < K) || mid == 0) return mid; else return GetFirstK(Array, length, K, start, mid-1); } else if(midData > K) { return GetFirstK(Array, length, K, start, mid-1); } else { return GetFirstK(Array, length, K, mid+1, end); }}int GetLastK(int Array[], int length, int K, int start, int end){ if(Array == NULL || length <= 0 || start<0 || end<0 || start>end) return -1; int mid = (start+end)/2; int midData = Array[mid]; if(midData == K) { if((mid < length-1 && Array[mid+1] > K) || mid == length-1) return mid; else return GetLastK(Array, length, K, mid+1, end); } else if(midData > K) { return GetLastK(Array, length, K, start, mid-1); } else { return GetLastK(Array, length, K, mid+1, end); }}int GetNumberOfK(int Array[], int length, int K){ if(Array == NULL || length <= 0) return -1; int first = GetFirstK(Array, length, K, 0, length-1); int last = GetLastK(Array, length, K, 0, length-1); if(first > -1 && last > -1) return last-first+1; else return 0;}int main(){ int a[]={1,2,3,3,3,3,4,4,5,6,7}; cout<<GetNumberOfK(a, 10, 4)<<endl;}
0 0
- [剑指offer][面试题38]数字在排序数组中出现的次数
- 剑指Offer:面试题38 数字在排序数组中出现的次数
- 剑指offer面试题38:数字在排序数组中出现的次数
- 剑指offer 面试题38—数字在排序数组中出现的次数
- 《剑指Offer》学习笔记--面试题38:数字在排序数组中出现的次数
- 【剑指Offer学习】【面试题38:数字在排序数组中出现的次数】
- 剑指Offer面试题38(Java版):数字在排序数组中出现的次数
- 剑指offer-面试题38:数字在排序数组中出现的次数
- 剑指offer之面试题38数字在排序数组中出现的次数
- 剑指offer面试题38:数字在已排序数组中出现的次数
- 剑指offer面试题38:数字在排序数组中出现的次数
- 剑指Offer----面试题38:数字在排序数组中出现的次数
- 剑指Offer面试题38:数字在排序数组中出现的次数 Java实现
- 剑指offer--面试题38:数字在排序数组中出现的次数
- 剑指Offer面试题38(Java版):数字在排序数组中出现的次数
- 剑指offer——面试题38:数字在排序数组中出现的次数
- 【剑指offer】面试题38-数字在排序数组中出现的次数
- 剑指offer-面试题38-数字在排序数组中出现的次数
- [Ubuntu]常见问题手册
- 2.0第二章寄存器
- 冒泡排序的链表实现
- 剑指offer-面试题37 两个链表的第一个公共节点
- Myeclipse中Package的错误
- 剑指offer-面试题38 : 数字在排序数组中出现的次数
- NYOJ 711 最舒适的路线
- Android:启动模式与任务栈,进程的关系
- 【day-6】全排列-不重复
- 【作业4】基本查询语句
- js 判断一个值是否为数字
- Logistic 梯度法进行分类
- 第一章 抽象和封装
- C#简介