每日一題 數字在排序陣列中出現的次數

2021-08-08 02:51:19 字數 1179 閱讀 4116

一下子想到的解法是遍歷,時間複雜度為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 ...