問題:
在排序陣列中,找出給定數字的出現次數,比如 [1, 2, 2, 2, 3] 中2的出現次數是3次。
解答:使用二分查詢的方法分別找出給定數字的開始位置minindex和結束位置maxindex,最壞情況下時間複雜度為o(logn)。
簡單**如下:
/*二分搜尋
2.找 |最大| 下標i使得x[i] = v
返回 i 或者-1
*/int binarysearch_max(const int* x,int n,int v)
if(x[u] == v) return u;
if(x[l] == v) return l;
return -1;}/*
二分搜尋
2.找 |最小| 下標i使得x[i] = v
返回 i 或者-1
*/int binarysearch_min(const int* x,int n,int v)
if(x[l] == v) return l;
if(x[u] == v) return u;
return -1;}/*
在排序陣列中,找出給定數字的出現次數,如:
[ 1, 2, 2, 2, 3 ]
中2的出現次數是3次
*/int count(int *x, int n, int v)
;int c = count(x,n,2);
cout<
在排序陣列中找出給定數字出現的次數
法一 由於給定的陣列已經是有序的,也就是說相同數字總是在一起,僅需要找出該數字最左邊的下標與最右邊的下標,兩者相減即可,又因為是已排序陣列,為了增加速度可以利用二分查詢演算法。關鍵 如下 isleft true代表找最左邊下標,false代表找最右邊下標 int binarysearch const...
在排序陣列中,找出給定數字的出現次數
題目 在排序陣列中,找出給定數字的出現次數,比如 1,2,2,2,3 中2的出現次數是3次。解法 使用二分查詢的方法分別找出給定數字的開始和結束位置,最壞情況下時間複雜度為o logn include include 全域性變數 int arr 測試陣列 int size sizeof arr si...
在排序陣列中找出給定數字出現的次數
這個思路不是很難,由於平時練習甚少,還是在細節浪費了一些時間,以後注意細節 先用二分法找到給定數字,然後找它左面出現幾次,右面出現幾次,然後相加 include int main void int start,end,mid,find,q,h,i 0,j 0 n sizeof a sizeof in...