数字在排序数组中出现的次数
2015-10-07 19:19
253 查看
题目:统计一个数字在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4。
方法:用二分查找法找到数组第一个和最后一个k
测试用例:
功能测试(数组中包含查找的数字,数组中没有查找的数字,查找的数字在数组中出现一次/多次)
边界值测试(查找数组中的最大值、最小值,数组中只有一个数字)
特殊输入测试(表示数组的指针为NULL指针)
方法:用二分查找法找到数组第一个和最后一个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指针)
相关文章推荐
- ruby 数组使用教程
- Ruby中的数组和散列表的使用详解
- C#实现AddRange为数组添加多个元素的方法
- C#动态调整数组大小的方法
- 详解Lua中的数组概念知识
- Perl中的列表和数组学习笔记
- 探索PowerShell (八) 数组、哈希表(附:复制粘贴技巧)
- C#中数组初始化与数组元素复制的方法
- C#交错数组用法实例
- PowerShell数组的一些操作技巧
- C#通过yield实现数组全排列的方法
- C#不重复输出一个数组中所有元素的方法
- C#实现将数组内元素打乱顺序的方法
- Ruby简明教程之数组和Hash介绍
- C语言查找数组里数字重复次数的方法
- C++二分查找在搜索引擎多文档求交的应用分析
- C语言柔性数组实例详解
- Perl中怎样从数组中删除某个值?
- 详解C++编程中用数组名作函数参数的方法
- C语言安全之数组长度与指针实例解析