标签:时间 data size arch 复杂度 数组 bin double 元素
int BinarySearch(vector<int> data,int low,int high,int k) { while(low <= high) { int m = low + (high-low)/2; if(data[m] == k) return m; else if(data[m] > k) high = m-1; else low = m+1; } return -1; } int GetNumberOfK(vector<int> data ,int k) { int len = data.size(); int index ; index = BinarySearch(data,0,len-1,k); if(index == -1) return 0; int low = index-1; int n1 = 0; int n2 = 0; int high = index+1; while((low >= 0) && (data[low] == k)) { low--; n1++; } while((high<len) && (data[high] == k)) { high++; n2++; } return n1+n2+1; }
看到的特别的想法:
思路:例如:样例 1,2,4,4,5,6 查找4的个数,则把3.5和4.5插入,1, 2, 3.5, 4, 4, 4.5, 5, 6 则4.5的位置减去3.5的位置就是4的个数。
但是这种方法在元素少的时候不如上一个方法的时间复杂度。因为要调用两次二分。
int GetNumberOfK(vector<int> data ,int k) { return biSearch(data, k+0.5) - biSearch(data, k-0.5) ; } int biSearch(const vector<int> & data, double num){ int s = 0, e = data.size()-1; while(s <= e){ int mid = (e - s)/2 + s; if(data[mid] < num) s = mid + 1; else if(data[mid] > num) e = mid - 1; } return s; }
两个方法的比较:
标签:时间 data size arch 复杂度 数组 bin double 元素
原文地址:https://www.cnblogs.com/Lune-Qiu/p/9128672.html