題目:統計乙個數字在排序陣列中出現的次數。例如輸入排序陣列和數字3,由於3在這個陣列中出現了4次,因此輸出4。
看到題目的第一感覺我們肯定想到的是遍歷整個陣列來求解,但這樣的演算法時間複雜度是o(n),還不是最優解,我們可以想到使用二分查詢來優化。
由於陣列是排好序的,假設我們是統計數字k在排序陣列中出現的次數,所以我們可以用二分查詢直接找到陣列中的第乙個k和最後乙個k。那麼如何用二分查詢演算法在陣列中找到第乙個k呢?二分查詢演算法總是先拿中間的數字和k作比較。如果中間的數字比k大,那麼k只有可能出現在陣列的前半段,下一輪我們只在陣列的前半段查詢就可以了,如果中間的數字比k小,那麼k只有可能出現在陣列的後半段,下一輪我們只在陣列的後半段查詢就可以了。如果中間的數字和k相等呢?我們先判斷這個數字是不是第乙個k。如果位於中間數字的前面乙個數字不是k,此時中間的數字剛好就是第乙個k.如果中間數字的前面乙個數字也是k,也就是說第乙個k肯定在陣列的前半段,下一輪我們仍然需要在陣列的前半段查詢。找到陣列中的最後乙個k的思路與上述類似。
數字在排序陣列中出現次數
統計乙個數字在排序陣列中出現的次數。思路 求乙個數字在這個排序陣列中出現的次數,首先想到的是使用二分查詢,當我找到乙個位置,然後往前就可以到達最前面第乙個出現該數字的位置,往後就可以到達最後面最後乙個出現該數字的位置,然後兩個位置相減此時就得到該數字出現的次數。但是問題在於我用二分查詢到位置後,然後...
數字在排序陣列中出現的次數
何海濤 劍指offer 名企面試官精講典型程式設計題 九度oj 題目描述 統計乙個數字在排序陣列中出現的次數。輸入 每個測試案例包括兩行 第一行有1個整數n,表示陣列的大小。1 n 10 6。第二行有n個整數,表示陣列元素,每個元素均為int。第三行有1個整數m,表示接下來有m次查詢。1 m 10 ...
數字在排序陣列中出現的次數
題目 統計乙個數字下排序陣列中出現的次數。例如輸入排序陣列和數字3,由於3在這個陣列中出現了4次,因此輸出4。當然第一眼就能想到遍歷這個陣列然後統計這個陣列中某個數字出現的次數。當然第一眼就能想到的方法通常來說效率都不怎麼樣 再稍微想一下這個題目,是乙個已序的陣列,所以呢,不難想到二分查詢。我們可以...