題⽬描述
請實現⼀個函數⽤來找出字符流中第⼀個只出現⼀次的字符。例如,當從字符流中只讀出前兩個字符" go "時,第⼀個只出現⼀次的字符是" g "。當從該字符流中讀出前六個字符“ google "時,第⼀個只出現⼀次的字符是" l "。
返回值描述:如果當前字符流沒有存在出現⼀次的字符,返回 # 字符。
思路及解答
有序哈希表
可以直接使用哈希的數據結構來存取我們的字符,對與重複的字符可以對值進
題⽬描述
請實現⼀個函數⽤來找出字符流中第⼀個只出現⼀次的字符。例如,當從字符流中只讀出前兩個字符" go "時,第⼀個只出現⼀次的字符是" g "。當從該字符流中讀出前六個字符“ google "時,第⼀個只出現⼀次的字符是" l "。
返回值描述:如果當前字符流沒有存在出現⼀次的字符,返回 # 字符。
思路及解答
有序哈希表
可以直接使用哈希的數據結構來存取我們的字符,對與重複的字符可以對值進
Rabin-Karp算法
Rabin-Karp算法是一種基於哈希函數的字符串匹配算法,由 Michael O. Rabin 和 Richard M. Karp 於1987年提出,核心思想是用哈希函數將模式串和文本串中的子串轉換為數值進行比較,避免大量不必要的字符比較。這個算法特別適合多模式串匹配場景,時間複雜度平均為O(n+m),n是文本串長度,m是模式串長度。
Rabin-Karp算法的關鍵在於
Rabin-Karp算法
Rabin-Karp算法是一種基於哈希函數的字符串匹配算法,由 Michael O. Rabin 和 Richard M. Karp 於1987年提出,核心思想是用哈希函數將模式串和文本串中的子串轉換為數值進行比較,避免大量不必要的字符比較。這個算法特別適合多模式串匹配場景,時間複雜度平均為O(n+m),n是文本串長度,m是模式串長度。
Rabin-Karp算法的關鍵在於
二分查找
二分查找(Binary Search)是一種高效的查找算法,也叫折半查找。核心思想:對於一個有序的數據集合,每次查找都將查找範圍縮小為原來的一半,直到找到目標值或確定目標值不存在。二分查找要求數據必須是有序的,經常應用於數組等支持隨機訪問的數據結構裏。跟線性查找相比,二分查找的效率要高得多,特別是對於大規模數據集。
算法步驟
確定查找範圍的左邊界 left 和右邊界 right
計
二分查找
二分查找(Binary Search)是一種高效的查找算法,也叫折半查找。核心思想:對於一個有序的數據集合,每次查找都將查找範圍縮小為原來的一半,直到找到目標值或確定目標值不存在。二分查找要求數據必須是有序的,經常應用於數組等支持隨機訪問的數據結構裏。跟線性查找相比,二分查找的效率要高得多,特別是對於大規模數據集。
算法步驟
確定查找範圍的左邊界 left 和右邊界 right
計
題⽬描述
求 1+2+3+...+n ,要求不能使⽤乘除法、 for 、 while 、 if 、 else 、 switch 、 case 等關鍵字及條件判斷語句( A?B:C )。
示例
輸⼊:5
輸出:15
思路及解答
用for循環
這個問題,如果直接使⽤ for 循環,超級簡單,重拳出擊,時間複雜度為 O(n) 。代碼如下:
public class Solution {
題⽬描述
求 1+2+3+...+n ,要求不能使⽤乘除法、 for 、 while 、 if 、 else 、 switch 、 case 等關鍵字及條件判斷語句( A?B:C )。
示例
輸⼊:5
輸出:15
思路及解答
用for循環
這個問題,如果直接使⽤ for 循環,超級簡單,重拳出擊,時間複雜度為 O(n) 。代碼如下:
public class Solution {