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 {
題目描述
有個遊戲是這樣的:⾸先,讓 n 個⼩朋友們圍成⼀個⼤圈,⼩朋友們的編號是0~n-1。然後,隨機指定⼀個數 m ,讓編號為0的⼩朋友開始報數。每次喊到 m-1 的那個⼩朋友要出列唱⾸歌,然後可以在禮品箱中任意的挑選禮物,並且不再回到圈中,從他的下⼀個⼩朋友開始,繼續 0... m-1報數....這樣下去....直到剩下最後⼀個⼩朋友,可以不⽤表演,並且拿到⽜客禮品,請你試着想下,哪個⼩朋友
題⽬描述
給定⼀個句⼦,將句⼦中的單詞進⾏翻轉,注意,單詞內部的字符順序不改變,改變的是單詞與單詞之間的順序,⽐如“ I am a coder. ”,翻轉之後變成“ coder. a am I ”。
示例
注意:引號內部才是輸⼊的內容
輸⼊:"You are a cool boy."
輸出:"boy. cool a are You"
思路及解答
Java內置函數分割反轉
Java
題⽬描述
彙編語⾔中有⼀種移位指令叫做循環左移( ROL ),現在有個簡單的任務,就是⽤字符串模擬這個指令的運算結果。對於⼀個給定的字符序列 S ,請你把其循環左移 K 位後的序列輸出。例如,字符序列S=”abcXYZdef” ,要求輸出循環左移3位後的結果,即“ XYZdefabc ”。是不是很簡單?OK,搞定它!
思路及解答
這道題⽬的意思就是將前⾯ n 位,移動到後⾯,那麼我們可以直接從第
題⽬描述
輸⼊⼀個遞增排序的數組和⼀個數字 S ,在數組中查找兩個數,使得他們的和正好是 S ,如果有多對數字的和等於 S ,輸出兩個數的乘積最⼩的。
返回值描述:對應每個測試案例,輸出兩個數,⼩的先輸出。
輸⼊:[1,2,4,7,11,15],15
返回值:[4,11]
思路及解答
暴⼒遍歷
直接遍歷每兩個數,查看其和是否符合等於 sum ,再計算其乘積,是否⼩於之前的乘積,如果⼩於,則更