糖果;及子串查詢分析
今日面試題:糖果
N個孩子站成一排,每個人分給一個權重。按照如下的規則分配糖果:
1. 每個孩子至少有一個糖果
2. 所分配權重較高的孩子,會比他的鄰居獲得更多的糖果
問題是,最少需要多少個糖果?
==================================================
子串查詢分析
原題
從一個長字串中查詢包含給定字符集合的最短子串。例如,長串為“aaaaaaaaaacbebbbbbdddddddcccccc”,字符集為 {abcd},那麼最短子串是“acbebbbbbd”。如果將條件改為“包含且只包含給定字符集合”,你的演算法和實現又將如何改動。
分析
本期的題目與上期的題目頗類似。上期我們在分析完之後,提到還可以利用hashmap來實現。這樣可以進一步的減小時間複雜度。具體的思路與上期的方法也類似,只是在判斷是否出現的時候,不是採用排序的方法,而是hashmap的方法。具體方法如下:
1. 遍歷一邊字符集合,將集合中的字元都加到hashmap中
2. 然後遍歷長串,記錄遍歷開始pBegin和結束pEnd的位置,直到hashmap中的字元都出現過,則不斷移動pBegin,檢視是否能夠滿足 所有字符集和中的字元都出現了,如果出現:則不斷更新最小長度;如果沒有出現,則停止移動pBegin,開始移動pEnd。依次類推,像一個可以伸縮的窗 口在長串上遍歷。
示例程式碼如下:
這個程式碼是《程式設計之美》中求解最短摘要的程式碼,其實本題,也是最短摘要的一個變化,字符集和就相當於查詢了。
這裡有一個小小的技巧,在移動pBegin的時候,怎麼判斷是否字符集合中的字元都出現了呢?可以採用給另外一個hashmap用來記錄字符集中字 符出現的次數,當pBegin指向的字元,出現在hashmap中,則其對應出現次數減1,如果次數為0了,則要停止pBegin,開始移動pEnd。
這個方法的時間複雜度為O(2*n + m),空間複雜度為O(n)。
【分析完畢】
本文來自微信:待字閨中,2013-10-04釋出,原創@陳利人 ,歡迎大家繼續關注微信公眾賬號“待字閨中”。
相關文章
- 子串查詢
- Python小技巧 - 子串查詢Python
- 複雜查詢—子查詢
- SQL查詢的:子查詢和多表查詢SQL
- MYsql 子查詢MySql
- MySQL子查詢MySql
- mysql-分組查詢-子查詢-連線查詢-組合查詢MySql
- 區分關聯子查詢和非關聯子查詢
- MySQL之連線查詢和子查詢MySql
- Javaweb-子查詢JavaWeb
- 巢狀子查詢巢狀
- GORM subquery 子查詢GoORM
- 從Oracle 11.2.0.4 BUG到Oracle子查詢展開分析Oracle
- MYSQL學習筆記25: 多表查詢(子查詢)[標量子查詢,列子查詢]MySql筆記
- 遞迴查詢子元素遞迴
- 教你使用SQLite 子查詢SQLite
- MySQL 相關子查詢MySql
- 【MySQL】檢視&子查詢MySql
- MYSQL學習筆記26: 多表查詢|子查詢MySql筆記
- MySQL資料庫基礎——多表查詢:子查詢MySql資料庫
- MySQL全面瓦解11:子查詢和組合查詢MySql
- 34. 過濾條件、多表查詢、子查詢
- 子串位置
- Laravel Query Builder 複雜查詢案例:子查詢實現分割槽查詢 partition byLaravelUI
- 什麼是SQL 語句中相關子查詢與非相關子查詢SQL
- 二、mybatis查詢分析MyBatis
- mongodb慢查詢分析MongoDB
- exists與in子查詢優化優化
- Oracle OCP(08):使用子查詢Oracle
- 子字串查詢演算法字串演算法
- StoneDB 子查詢最佳化
- Laravel 子查詢語句用法Laravel
- 最長子串
- mysql求交集:UNION ALL合併查詢,inner join內連線查詢,IN/EXISTS子查詢MySql
- PostgreSQL 原始碼解讀(29)- 查詢語句#14(查詢優化-上拉子查詢)SQL原始碼優化
- MySQL查詢擷取分析MySql
- 30串聯所有單詞的子串
- 原創:oracle 子查詢介紹Oracle
- SQL語言基礎(子查詢)SQL