數字在排序陣列中出現的次數 java

2021-07-15 02:41:18 字數 1405 閱讀 5602

題目:統計乙個數字在排序陣列中出現的次數。例如輸入排序陣列和數字3,由於3在這個陣列中出現了4次,因此輸出4.

思路:用二分查詢,分別找出第乙個3,和最後乙個3的位置,然後計算個數。

時間複雜度o(logn)

**:

package niuke.easy;

public class getnumberofk

/*** 題目描述 統計乙個數字在排序陣列中出現的次數。

* 解題思路 陣列是排序的,所以重複出現的數字是相鄰排列的。 用二分查詢演算法,找到第一次出現的位置,和 最後一次出現的位置。

* 判斷第一次出現的位置條件為:當前數字的前乙個是否與之相等,若是則繼續查詢,否則該位置就是第一次出現的位置。

* 判斷最後一次出現的位置條件為:當前數字的後乙個是否與之相等,若是則繼續查詢,否則該位置就是最後一次出現的位置。 出現的次數= last -

* first +1

* 時間複雜度:o(logn)

* * @param array

* @param k

* @return

*/public int getnumberofk(int array, int k)

int start = 0, end = array.length - 1;

int firstindex = getfirstindex(array, start, end, k);

int lastindex = getlastindex(array, start, end, k);

if (firstindex > -1 && lastindex > -1)

return result;

} private int getlastindex(int array, int start, int end, int k)

int midindex = (start + end) / 2;

int middata = array[midindex];

if (middata == k) else

} else if (middata > k) else

return getlastindex(array, start, end, k);

} private int getfirstindex(int array, int start, int end, int k)

int midindex = (start + end) / 2;

int middata = array[midindex];

if (middata == k) else

} else if (middata > k) else

return getfirstindex(array, start, end, k);

}}

數字在排序陣列中出現次數

統計乙個數字在排序陣列中出現的次數。思路 求乙個數字在這個排序陣列中出現的次數,首先想到的是使用二分查詢,當我找到乙個位置,然後往前就可以到達最前面第乙個出現該數字的位置,往後就可以到達最後面最後乙個出現該數字的位置,然後兩個位置相減此時就得到該數字出現的次數。但是問題在於我用二分查詢到位置後,然後...

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

何海濤 劍指offer 名企面試官精講典型程式設計題 九度oj 題目描述 統計乙個數字在排序陣列中出現的次數。輸入 每個測試案例包括兩行 第一行有1個整數n,表示陣列的大小。1 n 10 6。第二行有n個整數,表示陣列元素,每個元素均為int。第三行有1個整數m,表示接下來有m次查詢。1 m 10 ...

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

題目 統計乙個數字下排序陣列中出現的次數。例如輸入排序陣列和數字3,由於3在這個陣列中出現了4次,因此輸出4。當然第一眼就能想到遍歷這個陣列然後統計這個陣列中某個數字出現的次數。當然第一眼就能想到的方法通常來說效率都不怎麼樣 再稍微想一下這個題目,是乙個已序的陣列,所以呢,不難想到二分查詢。我們可以...