面试题38:数字在排序数组中出现的次数
来源:互联网 发布:自然灾害数据库 编辑:程序博客网 时间:2024/04/30 02:56
方法:
1. 查找这个数字的第一个位置,利用递归
2. 查找这个数字最后的位置,利用递归
3. 结束
#include<iostream>using namespace std;int get_first_k_index(int a[], int len, int k, int begin, int end){ if(begin > end){ return -1; } int mid_index = (begin + end)/2; int mid_data = a[mid_index]; if(mid_data == k){ //is first if(mid_index == 0 || (mid_index - 1 >= 0 && a[mid_index-1] < k)){ return mid_index; }else{ end = mid_index - 1; } }else if(mid_data > k){ end = mid_index - 1; }else{ begin = mid_index + 1; } return get_first_k_index(a, len, k, begin, end);}int get_end_k_index(int a[], int len, int k, int begin, int end){ if(begin > end){ return -1; } int mid_index = (begin + end)/2; int mid_data = a[mid_index]; if(mid_data == k){ //is first if(mid_index == len - 1 || (mid_index + 1 <= len - 1 && a[mid_index+1] > k)){ return mid_index; }else{ begin = mid_index + 1; } }else if(mid_data > k){ end = mid_index - 1; }else{ begin = mid_index + 1; } return get_end_k_index(a, len, k, begin, end);}int get_nums_of_k(int a[], int len, int k){ if(a == NULL || len < 0){ return -1; } int first = get_first_k_index(a, len, k, 0, len - 1); cout << "first:"<< first << endl; int end = get_end_k_index(a, len, k, 0, len - 1); cout << "end:"<< end << endl; if(first >= 0 && end >= first){ return end - first + 1; } return 0;}int main(){ int a[10] = {1,2,3,4,5,6,7,8,8,8}; int nums = get_nums_of_k(a, 10, 8); cout << nums << endl;}
0 0
- 【面试题】数字在排序数组中出现的次数
- 面试题38:数字在排序数组中出现的次数
- [剑指offer][面试题38]数字在排序数组中出现的次数
- 面试题38:数字在排序数组中出现的次数
- 剑指Offer:面试题38 数字在排序数组中出现的次数
- 面试题38:数字在排序数组中出现的次数
- 剑指offer面试题38:数字在排序数组中出现的次数
- 面试题38:数字在排序数组中出现的次数
- 剑指offer 面试题38—数字在排序数组中出现的次数
- 《剑指Offer》学习笔记--面试题38:数字在排序数组中出现的次数
- 【剑指Offer学习】【面试题38:数字在排序数组中出现的次数】
- 面试题38_数字在排序数组中出现的次数
- 剑指Offer面试题38(Java版):数字在排序数组中出现的次数
- 剑指offer-面试题38:数字在排序数组中出现的次数
- 剑指offer之面试题38数字在排序数组中出现的次数
- 剑指offer面试题38:数字在已排序数组中出现的次数
- 剑指offer面试题38:数字在排序数组中出现的次数
- 剑指Offer----面试题38:数字在排序数组中出现的次数
- Source Insight3.5个人使用习惯
- Codeforces 796D bfs
- Unity3D 制作按钮开关,旋钮开关,摇杆手柄 插件
- 简单工厂、工厂模式、抽象工厂模式
- 跳转功能的实现
- 面试题38:数字在排序数组中出现的次数
- 基础知识2
- 初等排序
- 我的java学习之路-jQuery
- CentOS升级Python2.6到Python2.7并安装pip
- imadjust从用法到原理—Matlab灰度变换函数之一
- JAVA AgentMain开发示例
- python socket 创建tcp服务器和客户端改进版(实现半双工聊天)
- 蓝桥杯JAVA语言B组_猜字母