今日面試題 子串行數目 及陣列牆分析

2021-07-12 02:50:06 字數 1066 閱讀 7687

2013-11-19

王亞洲待字閨中

今日面試題:子串行數目

給定兩個字串s和t(len(s)>len(t)),t可能是s的乙個子串行。求所有s的子串行集合中,有多少個子序列等於t。例如s="abbbc",t="abc",結果為3,即在s的所有子串行集合中,有3個子串行為t。

****************************************==

陣列牆分析

原題給定乙個正整數陣列如[2,5,1,2,3,4,7,7,6],陣列中每個數代表乙個牆的高度,如圖,

問:往牆裡倒水,牆之間的水坑總共可以裝多少水呢?

分析題目中的例子,可以裝水的示意圖如下:

木桶短板理論:乙隻木桶盛水的多少,並不取決於桶壁上最高的那塊木塊,而恰恰取決於桶壁上最短的那塊。此問題同樣也是這樣的道理,不同的是,此處的短板是相對而言的,畜水的多少由兩個鄰近的最長的板所決定,且這兩個長板不相鄰。 如果這是乙個遞增的陣列或是遞減的陣列或是先增後減的資料,顯然是不能裝水的,因為最長的板總是在一塊的。如要裝水則要求當從左往右遍歷陣列時,緊鄰的右邊的數比左邊數小,且不會一直小下去;同樣當從右往左遍歷資料時,要求緊鄰的左邊的資料比右邊的數小且不會一直小下去。 假如我們從左至右遍歷陣列,每個下標畜水的量最多為(目前為止的最大值-當前下標的值),可問題是此值是不確定,因為右邊的長板在哪我們不知道。

但是,如果我們指定兩個指標分別從陣列兩端向中間移動,當兩個指標相遇時過程結束,在移動的過程中,比較兩個指標處值的大小,值小的一方指標向前移動一位(對左邊的指標來說往右是前,對右邊的指標來說往左是前),如要移動後的值比移動前的值小,則說明此處可以畜水;如果移動後的值比移動前的值大,則此處不能畜水。如此遞迴下去,時間複雜度為o(n) ,分析完畢。示例**如下:

進一步,把問題稍微改一下,如果水坑不是連續的,不要求求出總的畜水值,而是畜水最多的那個值,要怎麼做呢?分析同上,兩個指標分別從兩端向中間遍歷,相遇時過程結束;對於大小為n的陣列,最多可以有 n/2 個不連續的水坑,當左右指標在移動時,每  當遇到乙個新的最大值大值則意味著乙個水坑的分界點。當找出所有的水坑後,再對所有的結果做一次排序(如果僅要最大值是不需要排序的),就可以了。示例**如下:

【分析完畢】

陣列面試題 子陣列之和

給定乙個含有n個元素的整形陣列a,再給定乙個和sum,求出陣列中滿足給定和的所有元素組合,舉個例子,設有陣列a 6 sum 10,則滿足和為10的所有組合是 注意,這是個n選m的問題,並不是兩兩組合問題。最直觀的想法就是窮舉,把陣列中元素的所有組合情況都找出來,然後看看哪些組合滿足給定的和即可,這種...

陣列面試題 子陣列之和

昨天在一位老兄的凡客面試題中看到的,拿來寫一下。給定乙個含有n個元素的整形陣列a,再給定乙個和sum,求出陣列中滿足給定和的所有元素組合,舉個例子,設有陣列a 6 sum 10,則滿足和為10的所有組合是 注意,這是個n選m的問題,並不是兩兩組合問題。最直觀的想法就是窮舉,把陣列中元素的所有組合情況...

面試題1 392 判斷子串行

給定字串 s 和 t 判斷 s 是否為 t 的子串行。你可以認為 s 和 t 中僅包含英文小寫字母。字串 t 可能會很長 長度 500,000 而 s 是個短字串 長度 100 字串的乙個子串行是原始字串刪除一些 也可以不刪除 字元而不改變剩餘字元相對位置形成的新字串。例如,ace 是 abcde ...