剑指offer-排序数组中数字出现的次数

xiaoxiao2021-02-27  150

题目:

求排序数组中某个数字出现的次数。

二分查找的加强版。

int GetFirstK(int *data, int length, int k, int start, int end) //数组首地址,数组长度,数字,开始查找位置,结束查找位置; { if (data == NULL || length == 0 || start > end) return 0; int middle = start + (end - start) / 2; if (data[middle] == k) { if (middle > 0 && data[middle - 1] != k) return middle; else end = middle - 1; } else if (data[middle] > k) end = middle - 1; else start = middle + 1; return GetFirstK(data, length, start, end); } int GetLastK(int *data, int length, int k,int start, int end) { if (data == NULL ||length==0|| start > end) return 0; int middle = start + (end - start) / 2; if (data[middle] == k) { if (middle > 0 && data[middle + 1] != k) return middle; else start = middle + 1; } else if (data[middle] > k) end = middle - 1; else start = middle + 1; return GetLastK(data, length, k, start, end); } int GetNumberOfK(int *data,int length, int k) { if (data == NULL||length==0) return 0; 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); number = last - first + 1; } return number; }

转载请注明原文地址: https://www.6miu.com/read-17118.html

最新回复(0)