博客 / 列表

sevencoding - 劍指offer-54、字符流中第一個不重複的字符

題⽬描述 請實現⼀個函數⽤來找出字符流中第⼀個只出現⼀次的字符。例如,當從字符流中只讀出前兩個字符" go "時,第⼀個只出現⼀次的字符是" g "。當從該字符流中讀出前六個字符“ google "時,第⼀個只出現⼀次的字符是" l "。 返回值描述:如果當前字符流沒有存在出現⼀次的字符,返回 # 字符。 思路及解答 有序哈希表 可以直接使用哈希的數據結構來存取我們的字符,對與重複的字符可以對值進

JAVA

sevencoding - 劍指offer-53、表達數值的字符串

題⽬描述 請實現⼀個函數⽤來判斷字符串str是否表示數值(包括科學計數法的數字,⼩數和整數)。科學計數法的數字(按順序)可以分成以下⼏個部分: 若⼲空格 ⼀個整數或者⼩數 (可選)⼀個 ' e ' 或 ' E ' ,後⾯跟着⼀個整數(可正可負) 若⼲空格 ⼩數(按順序)可以分成以下⼏個部分: 若⼲空格 (可選)⼀個符號字符('+' 或 '-') 可能是以下描述格式之⼀:

後端

sevencoding - 劍指offer-53、表達數值的字符串

題⽬描述 請實現⼀個函數⽤來判斷字符串str是否表示數值(包括科學計數法的數字,⼩數和整數)。科學計數法的數字(按順序)可以分成以下⼏個部分: 若⼲空格 ⼀個整數或者⼩數 (可選)⼀個 ' e ' 或 ' E ' ,後⾯跟着⼀個整數(可正可負) 若⼲空格 ⼩數(按順序)可以分成以下⼏個部分: 若⼲空格 (可選)⼀個符號字符('+' 或 '-') 可能是以下描述格式之⼀:

JAVA

sevencoding - 一文講清楚圖論相關算法

建圖函數 ListInteger[] buildGraph(int numCourses, int[][] prerequisites) { // 圖中共有 numCourses 個節點 ListInteger[] graph = new LinkedList[numCourses]; for (int i = 0; i numCourses; i++) {

後端

sevencoding - 一文講清楚圖論相關算法

建圖函數 ListInteger[] buildGraph(int numCourses, int[][] prerequisites) { // 圖中共有 numCourses 個節點 ListInteger[] graph = new LinkedList[numCourses]; for (int i = 0; i numCourses; i++) {

JAVA

sevencoding - 遞歸與分治算法

遞歸算法 遞歸算法(Recursion Algorithm)是一種重要的編程方法,核心思想是函數通過調用自身來解決問題。在遞歸中,一個複雜的問題被分解為相同類型但規模更小的子問題,直到達到一個簡單到可以直接解決的基本情況(基準情況)。遞歸算法特別適合解決具有自相似結構的問題,時間複雜度跟遞歸深度和每層處理的複雜度有關。 遞歸算法的妙處在於它能用簡潔優雅的代碼解決看似複雜的問題,但在使用時一定要注意

後端

sevencoding - 遞歸與分治算法

遞歸算法 遞歸算法(Recursion Algorithm)是一種重要的編程方法,核心思想是函數通過調用自身來解決問題。在遞歸中,一個複雜的問題被分解為相同類型但規模更小的子問題,直到達到一個簡單到可以直接解決的基本情況(基準情況)。遞歸算法特別適合解決具有自相似結構的問題,時間複雜度跟遞歸深度和每層處理的複雜度有關。 遞歸算法的妙處在於它能用簡潔優雅的代碼解決看似複雜的問題,但在使用時一定要注意

JAVA

sevencoding - 劍指offer-52、正則表達式匹配

題⽬描述 請實現⼀個函數⽤來匹配包括' . '和' * '的正則表達式。模式中的字符' . '表示任意⼀個字符, ⽽' * '表示它前⾯的字符可以出現任意次(包含0 次)。 在本題中,匹配是指字符串的所有字符匹配整個模式。例如,字符串" aaa "與模式" a.a "和" ab*ac*a "匹配,但是與" aa.a "和" ab*a "均不匹 配 示例1 輸⼊: "aaa","a

後端

sevencoding - 劍指offer-52、正則表達式匹配

題⽬描述 請實現⼀個函數⽤來匹配包括' . '和' * '的正則表達式。模式中的字符' . '表示任意⼀個字符, ⽽' * '表示它前⾯的字符可以出現任意次(包含0 次)。 在本題中,匹配是指字符串的所有字符匹配整個模式。例如,字符串" aaa "與模式" a.a "和" ab*ac*a "匹配,但是與" aa.a "和" ab*a "均不匹 配 示例1 輸⼊: "aaa","a

JAVA

sevencoding - 劍指offer-51、構建乘積數組

題⽬描述 給定⼀個數組A[0,1,...,n-1] ,請構建⼀個數組B[0,1,...,n-1] ,其中B 中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1] 。不能使⽤除法。(注意:規定B[0] =A[1] * A[2] * ... * A[n-1],B[n-1] = A[0] * A[1] * ... * A[n-2] ) 對於A ⻓度為1 的情況,

後端

sevencoding - 劍指offer-51、構建乘積數組

題⽬描述 給定⼀個數組A[0,1,...,n-1] ,請構建⼀個數組B[0,1,...,n-1] ,其中B 中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1] 。不能使⽤除法。(注意:規定B[0] =A[1] * A[2] * ... * A[n-1],B[n-1] = A[0] * A[1] * ... * A[n-2] ) 對於A ⻓度為1 的情況,

JAVA

sevencoding - 劍指offer-50、數組中重複的數字

題目描述 在⼀個⻓度為 n 的數組⾥的所有數字都在 0 到n-1 的範圍內。 數組中某些數字是重複的,但不知 道有⼏個數字是重複的。也不知道每個數字重複⼏次。請找出數組中第⼀個重複的數字。 例如,如果輸⼊⻓度為 7 的數組 [2,3,1,0,2,5,3] ,那麼對應的輸出是第⼀個重複的數字 2 。沒有重複的數字 返回 -1 。 示例1 輸⼊ [ 2, 3, 1, 0, 2, 5,

後端

sevencoding - 劍指offer-50、數組中重複的數字

題目描述 在⼀個⻓度為 n 的數組⾥的所有數字都在 0 到n-1 的範圍內。 數組中某些數字是重複的,但不知 道有⼏個數字是重複的。也不知道每個數字重複⼏次。請找出數組中第⼀個重複的數字。 例如,如果輸⼊⻓度為 7 的數組 [2,3,1,0,2,5,3] ,那麼對應的輸出是第⼀個重複的數字 2 。沒有重複的數字 返回 -1 。 示例1 輸⼊ [ 2, 3, 1, 0, 2, 5,

JAVA

sevencoding - 字符串匹配算法

Rabin-Karp算法 Rabin-Karp算法是一種基於哈希函數的字符串匹配算法,由 Michael O. Rabin 和 Richard M. Karp 於1987年提出,核心思想是用哈希函數將模式串和文本串中的子串轉換為數值進行比較,避免大量不必要的字符比較。這個算法特別適合多模式串匹配場景,時間複雜度平均為O(n+m),n是文本串長度,m是模式串長度。 Rabin-Karp算法的關鍵在於

後端

sevencoding - 字符串匹配算法

Rabin-Karp算法 Rabin-Karp算法是一種基於哈希函數的字符串匹配算法,由 Michael O. Rabin 和 Richard M. Karp 於1987年提出,核心思想是用哈希函數將模式串和文本串中的子串轉換為數值進行比較,避免大量不必要的字符比較。這個算法特別適合多模式串匹配場景,時間複雜度平均為O(n+m),n是文本串長度,m是模式串長度。 Rabin-Karp算法的關鍵在於

JAVA

sevencoding - 查找算法

二分查找 二分查找(Binary Search)是一種高效的查找算法,也叫折半查找。核心思想:對於一個有序的數據集合,每次查找都將查找範圍縮小為原來的一半,直到找到目標值或確定目標值不存在。二分查找要求數據必須是有序的,經常應用於數組等支持隨機訪問的數據結構裏。跟線性查找相比,二分查找的效率要高得多,特別是對於大規模數據集。 算法步驟 確定查找範圍的左邊界 left 和右邊界 right 計

後端

sevencoding - 查找算法

二分查找 二分查找(Binary Search)是一種高效的查找算法,也叫折半查找。核心思想:對於一個有序的數據集合,每次查找都將查找範圍縮小為原來的一半,直到找到目標值或確定目標值不存在。二分查找要求數據必須是有序的,經常應用於數組等支持隨機訪問的數據結構裏。跟線性查找相比,二分查找的效率要高得多,特別是對於大規模數據集。 算法步驟 確定查找範圍的左邊界 left 和右邊界 right 計

JAVA

sevencoding - 劍指offer-49、把字符串轉換成整數

題⽬描述 請你來實現⼀個 myAtoi(string s) 函數,使其能將字符串轉換成⼀個 32 位有符號整數(類似C/C++ 中的 atoi 函數)。 函數 myAtoi(string s) 的算法如下: 讀⼊字符串並丟棄⽆⽤的前導空格 檢查下⼀個字符(假設還未到字符末尾)為正還是負號,讀取該字符(如果有)。 確定最終結果是負數,還是正數。 如果兩者都不存在,則假定結果為正。 讀⼊下⼀個

後端

sevencoding - 劍指offer-49、把字符串轉換成整數

題⽬描述 請你來實現⼀個 myAtoi(string s) 函數,使其能將字符串轉換成⼀個 32 位有符號整數(類似C/C++ 中的 atoi 函數)。 函數 myAtoi(string s) 的算法如下: 讀⼊字符串並丟棄⽆⽤的前導空格 檢查下⼀個字符(假設還未到字符末尾)為正還是負號,讀取該字符(如果有)。 確定最終結果是負數,還是正數。 如果兩者都不存在,則假定結果為正。 讀⼊下⼀個

JAVA

sevencoding - 劍指offer-48、不使⽤加減乘除實現加法

題⽬描述 寫⼀個函數,求兩個整數之和,要求在函數體內不得使⽤ + 、 - 、 * 、 / 四則運算符號。 示例1 輸⼊:1,2 返回值:3 思路及解答 位運算迭代法(推薦) 將加法分解為「無進位和」+「進位值」,循環直到進位為0 位運算加法的數學原理: 異或運算 (^):實現無進位加法 0^0=0, 0^1=1, 1^0=1, 1^1=0(進位丟失) 與運算 (

後端

sevencoding - 劍指offer-48、不使⽤加減乘除實現加法

題⽬描述 寫⼀個函數,求兩個整數之和,要求在函數體內不得使⽤ + 、 - 、 * 、 / 四則運算符號。 示例1 輸⼊:1,2 返回值:3 思路及解答 位運算迭代法(推薦) 將加法分解為「無進位和」+「進位值」,循環直到進位為0 位運算加法的數學原理: 異或運算 (^):實現無進位加法 0^0=0, 0^1=1, 1^0=1, 1^1=0(進位丟失)

JAVA

sevencoding - 劍指offer-47、求1+2+3...+n

題⽬描述 求 1+2+3+...+n ,要求不能使⽤乘除法、 for 、 while 、 if 、 else 、 switch 、 case 等關鍵字及條件判斷語句( A?B:C )。 示例 輸⼊:5 輸出:15 思路及解答 用for循環 這個問題,如果直接使⽤ for 循環,超級簡單,重拳出擊,時間複雜度為 O(n) 。代碼如下: public class Solution {

後端

sevencoding - 劍指offer-47、求1+2+3...+n

題⽬描述 求 1+2+3+...+n ,要求不能使⽤乘除法、 for 、 while 、 if 、 else 、 switch 、 case 等關鍵字及條件判斷語句( A?B:C )。 示例 輸⼊:5 輸出:15 思路及解答 用for循環 這個問題,如果直接使⽤ for 循環,超級簡單,重拳出擊,時間複雜度為 O(n) 。代碼如下: public class Solution {

JAVA

sevencoding - 十大經典排序算法

引言 所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。排序算法,就是如何使得記錄按照要求排列的方法。排序算法在很多領域得到相當地重視,尤其是在大量數據的處理方面。一個優秀的算法可以節省大量的資源。在各個領域中考慮到數據的各種限制和規範,要得到一個符合實際的優秀算法,得經過大量的推理和分析。 簡介 排序算法可以分為: 內部排序:數據記錄在內存中進行排序。

後端