统计一个数字在排序数组中出现的次数。
来源:互联网 发布:游戏公司程序员绩效 编辑:程序博客网 时间:2024/06/07 03:18
剑指offer:统计一个数字在排序数组中出现的次数。
思路:改进二分查找算法,找到第一个K出现的索引,和第最后一个k的索引。
class Solution {public: int GetNumberOfK(vector<int> data ,int k) { //必须先考虑边境条件 int vecLen = data.size(); if(vecLen == 0) return 0; //GetFirstKIndex,改良二分查找法,找到最左边K的索引int leftIndexOfK = GetFirstKIndex(data,k,vecLen); if(leftIndexOfK == -1)//如果不存在k,返回零。 return 0;int RightIndexOfK = GetLastKIndex(data,k,vecLen);return RightIndexOfK - leftIndexOfK + 1; } int GetFirstKIndex(vector<int> &data, int k, int length ){ int low,high,mid;low = 0;high = length - 1;while(low <= high){mid = (low + high) / 2;if(data[mid] > k)high = mid -1;else if(data[mid] < k)low = mid + 1;else if(data[mid] == k){ if(mid > 0 && data[mid - 1] != k)return mid;else if(mid == 0)return mid;else high = mid -1;}}return -1;} int GetLastKIndex(vector<int> &data, int k, int length ){ int low,high,mid;low = 0;high = length - 1;while(low <= high){mid = (low + high) / 2;if(data[mid] > k)high = mid -1;else if(data[mid] < k)low = mid + 1;else if(data[mid] == k){ if(mid < length && data[mid + 1] != k)return mid;else if(mid == length)return mid;else low = mid +1;}}return -1;}};
阅读全文
0 0
- 统计一个数字在排序数组中出现的次数
- 统计一个数字在排序数组中出现的次数
- 统计一个数字在排序数组中出现的次数
- 统计一个数字在排序数组中出现的次数
- 统计一个数字在排序数组中出现的次数
- 统计一个数字在排序数组中出现的次数。
- 统计一个数字在排序数组中出现的次数。
- 统计一个数字在排序数组中出现的次数
- 统计一个数字在排序数组中出现的次数。
- 统计一个数字在排序数组中出现的次数
- 统计一个数字在排序数组中出现的次数
- 统计一个数字在排序数组中出现的次数。
- 统计一个数字在排序数组中出现的次数
- 统计一个数字在排序数组中出现的次数
- (4)统计一个数字,在排序数组中出现的次数
- 统计一个数字在排序数组中出现的次数(二分法)
- 剑指offer-38 统计一个数字在排序数组中出现的次数
- 【c语言】统计一个数字在排序数组中出现的次数
- 题目1166:迭代求立方根
- MySQL索引背后的数据结构及算法原理
- HDU 1718 Rank
- [leetcode]133. Clone Graph
- 微信小程序开发——1.环境搭建
- 统计一个数字在排序数组中出现的次数。
- HDU 6047 Maximum Sequence
- Sky 数
- 线段树优化DP [Poi2010]Monotonicity 2
- CodeForces
- HDU5952 Counting Cliques(思维+DFS)
- JWT 进阶 -- JJWT
- 将本地代码库push到GitHub上的超详细操作
- Node.js一些知识点(操作步骤)