括號匹配;及找數字續分析
今日面試題:括號匹配
給定字串,輸出括號是否匹配,例如,
1. "()" yes;
2. ")(" no;
3. "(abcd(e)" no;
4. "(a)(b)" yes。
要求必須用遞迴寫,整個實現不可以出現一個迴圈語句。
===========================================================
找數字續分析
原題
一個陣列A,數字出現的情況,只有以下三種:
1. 一些數字只出現一次
2. 一些數字出現兩次
3. 只有一個數字出現三次
請給出方法,找到出現三次的數字。
分析
這個題目和“找數字”的題目比較相似,但是解法上類似麼?之前的解法是檢查某一位上的1的和,是否能夠被3整除,因為整數是32位的,可以開闢一個 32位大小的陣列,這也是常數空間的。那麼這個題目可以用這個方法來解決麼?因為有不確定個數的數字出現了一次,這樣可以產生的餘數的種類也就比較多了。 那該怎麼處理呢?
hashmap的方法被稱為萬金油,在犧牲了空間的條件下,很好的達到了O(n)的時間複雜度。
如果要求常數空間的解法呢?之前的文章也有討論,快排的時間複雜度是O(nlogn),然後遍歷一遍,找到連續三個相同的數字。後面這一遍遍歷,可以省去,因為出現三次的數字只有一個。但總的時間複雜度仍是O(nlogn)。
是否還有其他的方法呢?有的同學給出瞭如下的方法:可以取得A中所有數字的乘積p,我們假設p沒有溢位。這是遍歷陣列中的每一個元素A[i],檢視 是否p % (A[i] * A[i] * A[i]) == 0,但此時,A[i]並不是最終要找到的數字,還需要遍歷陣列A,檢視A[i]是否出現了三次。但這個方法整體的時間複雜度為O(n^2)。
上面分析了幾個思路,希望能夠幫助大家開拓思路,這裡留給大家一個思考題目:上面這個題目,能夠在時間複雜度O(n),空間複雜度O(1)的條件下完成麼?如果不能怎麼說明?
之前的“找數字”的題目,除了我們介紹的解法,尚有比較犀利,充滿技巧的解法。那麼這個題目呢?希望大家熱烈的討論,可以在微博上和我們互動。
本文來自微信:待字閨中,2013-09-14釋出,原創@陳利人 ,歡迎大家繼續關注微信公眾賬號“待字閨中”。
相關文章
- 找數字續;及缺失的數字分析
- interleave字串;及括號匹配分析字串
- 缺失的數字;及找數字分析
- 【棧】括號匹配
- 找數字;及最長等差數列分析
- HDU 5831 Rikka with Parenthesis II (括號匹配)
- 資料結構括號匹配問題資料結構
- LeetCode 3: PairsOfParentheses (括號匹配問題)LeetCodeAI
- 括號匹配的檢驗問題(C++)C++
- POJ 2955-Brackets(括號匹配-區間DP)Racket
- 括號匹配檢驗 資料結構運用資料結構
- 找最大數;及序列生成分析
- UVA 673 括號的匹配——經典棧的應用
- {{rateTime}}大括號裡面的數字轉換為字串(日期)字串
- JavaScript函式多個小括號連續呼叫JavaScript函式
- 理解正規表示式中的括號 (),方括號 [] 和大括號 {}
- 【資料結構】棧的應用--括號的匹配(c++)資料結構C++
- 格點數目;及兄弟數字分析
- 匹配指定位數不重複數字
- leecode856.括號中的分數
- 括號畫家
- 兄弟數字;及修理柵欄分析
- 詳解中括號語法及點語法
- c++物件建立帶括號與無括號的區別C++物件
- JavaScript中圓括號()和方括號[]的一個特殊用法JavaScript
- 重排陣列;及消失的數字分析陣列
- 數字遊戲;及螞蟻螞蟻分析遊戲
- Shell 括號總結
- Swift之花括號Swift
- 最長有效括號
- 【題解】括號序列
- 正則中括號點符號符號
- JSON 字串中的中括號和大括號區別詳解JSON字串
- JavaScript 函式呼叫時帶括號和不帶括號的區別JavaScript函式
- 七夕鵲橋;及數字遊戲分析遊戲
- Matlab中的括號()[]{}Matlab
- 每日一題: 有效括號每日一題
- 20. 有效的括號