数字在排序数组中出现的次数
来源:互联网 发布:数据库基础面试题 编辑:程序博客网 时间:2024/05/01 15:29
题目:统计一个数字在排序数组中出现的次数。例如输入排序数组
方法:用二分查找法找到数组第一个和最后一个k
int GetFirstK(int* data, int length, int k, int start, int end){ if (start > end){ return -1; } int middleIndex = (start + end) / 2; int middleData = data[middleIndex]; if (middleData == k){ if ((middleIndex > 0 && data[middleIndex - 1] != k) || middleIndex == 0){ return middleIndex; } else { end = middleIndex - 1; } } else if (middleData > k){ end = middleIndex - 1; } else { start = middleIndex + 1; } return GetFirstK(data, length, k, start, end);}int GetLastK(int* data, int length, int k, int start, int end){ if (start > end){ return -1; } int middleIndex = (start + end) / 2; int middleData = data[middleIndex]; if (middleData == k){ if ((middleIndex < length - 1 && data[middleIndex + 1] != k) || middleIndex == length - 1){ return middleIndex; } else { start = middleIndex + 1; } } else if (middleData < k){ start = middleIndex + 1; } else { end = middleIndex - 1; } return GetLastK(data, length, k, start, end);}int GetNumberOfK(int* data, int length, int k){ int number = 0; if (data != NULL && length > 0){ int first = GetFirstK(data, length, k, 0, length - 1); int last = GetLastK(data, length, k, 0, length - 1); if (first > -1 && last > -1){ number = last - first + 1; } } return number;}
测试用例:
- 功能测试(数组中包含查找的数字,数组中没有查找的数字,查找的数字在数组中出现一次/多次)
- 边界值测试(查找数组中的最大值、最小值,数组中只有一个数字)
- 特殊输入测试(表示数组的指针为NULL指针)
0 0
- 【数组8】数字在排序数组中出现的次数
- 【数组4】数字在排序数组中出现的次数
- 数组9:数字在排序数组中出现的次数
- 数字在排序数组中出现的次数(数组)
- 在排序数组中,找出给定数字的出现次数
- 在排序数组中,找出给定数字的出现次数
- 在排序数组中,找出给定数字的出现次数
- 统计一个数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 在排序数组中,找出给定数字的出现次数
- 在排序数组中,找出给定数字出现的次数
- 数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 在排序数组中,找出给定数字的出现次数
- JS手机触摸屏的事件用法详解
- redis部署使用
- HDU5122(树状数组)
- undefined reference to 'pthread_create'问题解决
- 对于大学生应该如何选择软件测试方面的企业?
- 数字在排序数组中出现的次数
- Java泛型T的应用 获取T类型
- Redis内存使用优化和存储
- svn 使用配置详解
- vim打开文件时显示行号
- 心情
- hibernate双边的一对一关系
- Two Sum
- 九九乘法