一下子想到的解法是遍歷,時間複雜度為o(n)
改進:排序的陣列,想到二分查詢查詢數字的方法,這裡遷移為找第一次出現該數字和最後一次出現該數字,最後得到陣列中該數字出現的總次數。
如何在陣列中找到第乙個數字出現的位置????
二分查詢總是先拿中間的值與k作比較,如果中間數字大於k,則第乙個出現的肯定在陣列的前半段,如果中間數字小於k,則第乙個出現的肯定在陣列的前半段,較為複雜的是:中間數字等於k,如果中間數字的前乙個數字也為k,則第一次出現的在前半段,否則中間數字的位置即為第一次出現的位置。採用遞迴
**:
package core;
/**問題描述:統計乙個數字在排序陣列中出現的次數
* 輸入:和3
* 輸出:5
* created by lxq on 2017/9/12.
*/public
class
problem2 ;
int k = problem2.getnumberofk(array,3);
system.out.println(k);
}public
intgetnumberofk(int array,int k)
}return number;
}//利用二分查詢,時間複雜度為o(logn),找到到最後乙個k在陣列中的下標
private
intgetlastk(int array, int k, int start, int end)
else
if(middledata>k)else
return getlastk(array,k,start,end);
}//利用二分查詢,時間複雜度為o(logn),找到第乙個k在陣列中的下標
private
intgetfirstk(int array, int k, int start, int end)
//中間數字大於k,在前半段遞迴呼叫
else
if(middledata>k)
//中間數字小於k,在後半段遞迴呼叫
else
return getfirstk(array,k,start,end);
}}
數字在排序陣列中出現次數
統計乙個數字在排序陣列中出現的次數。思路 求乙個數字在這個排序陣列中出現的次數,首先想到的是使用二分查詢,當我找到乙個位置,然後往前就可以到達最前面第乙個出現該數字的位置,往後就可以到達最後面最後乙個出現該數字的位置,然後兩個位置相減此時就得到該數字出現的次數。但是問題在於我用二分查詢到位置後,然後...
刷題 數字在排序陣列中出現的次數
統計乙個數字在排序陣列中出現的次數。既然輸入的陣列是排序的,那麼我們很自然地可以想到用二分查詢演算法。我們可以先用二分查詢演算法找到乙個k,然後在找到的k的左右兩邊順序掃瞄。因為要查詢的數字在長度為n的陣列中有可能出現了n次,所以順序掃瞄的時間複雜度是o n 這樣和直接掃瞄整個陣列進行統計的效率是一...
數字在排序陣列中出現的次數
何海濤 劍指offer 名企面試官精講典型程式設計題 九度oj 題目描述 統計乙個數字在排序陣列中出現的次數。輸入 每個測試案例包括兩行 第一行有1個整數n,表示陣列的大小。1 n 10 6。第二行有n個整數,表示陣列元素,每個元素均為int。第三行有1個整數m,表示接下來有m次查詢。1 m 10 ...