給出乙個整型陣列num,對其中的每個元素,輸出在它左側且比它小的最近元素,要求時間複雜度為o(n)。例如int num=,2無左側最近元素;4左側最近的是2;1沒有;3左側最近的是1.
分析:建立乙個棧,然後將陣列中的元素從右至左依次壓入棧中。對每個元素,入棧前先檢查棧頂元素是否比它大,若是的話,則該元素即為棧頂元素的左側最近小元素,輸出結果,棧頂彈出,再看此時的新棧頂是否還比當前元素大。直到棧頂元素不大於當前元素時,再將該元素壓入棧中。
當所有元素均壓入棧時,棧中剩下的元素均不存在左側最近小元素,將其結果輸出。
**如下:
// [10/10/2013 qingezha]
// 輸出每個元素中,在它左側且比它小的最近元素
void printeachmin(int num, int len)
{ if(!num || len<=0)
return ;
stacksta;
// 對每個元素,進棧前先迴圈判斷棧頂是否比它大,若是則該元素就是棧頂的左側最近小元素
// 此時輸出結果後,彈出棧頂元素。最後將該元素壓入棧
for (int i=len-1; i>=0; --i){
while(!sta.empty() && num[i]
一道百度面試題
下面這段 是把中英文混合字串 漢字用兩個位元組表示,特點是第乙個位元組的最高位為1 中的大寫字母轉化為小寫字母,請找出其中的bug,注意各種異常情況。for char piterator szword piterator 0 piterator else if piterator a piterat...
百度一道面試題
我這裡複製的是原話,當然順序是不一定的,很多拿到題目第一反應就是用map,當然可以解決,但是效率不高。還有人覺得應該用演算法 我是沒想到用啥演算法好.還有覺得應該先排序.還有覺得用位圖.bitmap 等等方法!我都覺得麻煩,思維方式就是,從節省時間考慮,從陣列來看,我們都得遍歷一次陣列裡面的元素,那...
憶一道百度面試題
題意 題目大概的意思是有乙個n x n的矩陣方格,在這個矩陣中有m個硬幣,每個硬幣的位置事先知道,且乙個格仔最多只能放乙個硬幣,現有乙個機械人從 0,0 的位置開始走,每次只能向下或者向右走一格,最終到達 n,n 設計程式計算機械人能拿到的最大的硬筆數。看到這個題目一看就是乙個動態規劃的問題。既然是...