在排序陣列中找出給定數字出現的次數

2021-06-22 10:38:51 字數 552 閱讀 3471

法一:由於給定的陣列已經是有序的,也就是說相同數字總是在一起,僅需要找出該數字最左邊的下標與最右邊的下標,兩者相減即可,又因為是已排序陣列,為了增加速度可以利用二分查詢演算法。

關鍵**如下:

isleft=true代表找最左邊下標,false代表找最右邊下標

int binarysearch(const vector&a, int num, bool isleft)

else

left = mid + 1;

} }return last == -1 ? -1 : last;

}

法二:利用unordered_map(hash map):序列有雜湊函式若排序,將次序列分割槽到成為儲存桶的有序序列中,在每個儲存桶中,比較函式將確定任一元素是否具有等效性。此方法也適用於未排序陣列

**如下:

void umap(const vector&a)

cout << ma[5] << endl;

}

在排序陣列中,找出給定數字的出現次數

題目 在排序陣列中,找出給定數字的出現次數,比如 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...

在排序陣列中,找出給定數字的出現次數

題目 在排序陣列中,找出給定數字的出現次數,比如 1,2,2,2,3 中2的出現次數是3次。解法 使用二分查詢的方法分別找出給定數字的開始和結束位置,最壞情況下時間複雜度為o logn include include 全域性變數 int arr 測試陣列 int size sizeof arr si...