尋找數組的中心索引
給你一個整數數組 nums ,請計算數組的 中心下標 。 數組 中心下標 是數組的一個下標,其左側所有元素相加的和等於右側所有元素相加的和。 如果中心下標位於數組最左端,那么左側數之和視為 0 ,因為在下標的左側不存在元素。這一點對於中心下標位於數組最右端同樣適用。 如果數組有多個中心下標,應該返回 最靠近左邊 的那一個。如果數組不存在中心下標,返回 -1 。 示例 1: 輸入:nums = [1, 7, 3, 6, 5, 6] 輸入:nums = [1, 2, 3] 輸入:nums = [2, 1, -1] 提示: 1 <= nums.length <= 104 -1000 <= nums[i] <= 1000 |
搜索插入位置
給定一個排序數組和一個目標值,在數組中找到目標值,並返回其索引。如果目標值不存在於數組中,返回它將會被按順序插入的位置。 請必須使用時間復雜度為 O(log n) 的算法。
示例 1: 輸入: nums = [1,3,5,6], target = 5 輸入: nums = [1,3,5,6], target = 2 輸入: nums = [1,3,5,6], target = 7 輸入: nums = [1,3,5,6], target = 0 輸入: nums = [1], target = 0 提示: 1 <= nums.length <= 104 |
合並區間
以數組 intervals 表示若干個區間的集合,其中單個區間為 intervals[i] = [starti, endi] 。請你合並所有重疊的區間,並返回一個不重疊的區間數組,該數組需恰好覆蓋輸入中的所有區間。
示例 1: 輸入:intervals = [[1,3],[2,6],[8,10],[15,18]] 輸入:intervals = [[1,4],[4,5]] 提示: 1 <= intervals.length <= 104 |
旋轉矩陣
給你一幅由 N × N 矩陣表示的圖像,其中每個像素的大小為 4 字節。請你設計一種算法,將圖像旋轉 90 度。 不占用額外內存空間能否做到?
示例 1: 給定 matrix = 原地旋轉輸入矩陣,使其變為: 給定 matrix = 原地旋轉輸入矩陣,使其變為: |
零矩陣
編寫一種算法,若M × N矩陣中某個元素為0,則將其所在的行與列清零。
示例 1: 輸入: 輸入: |
對角線遍歷
給你一個大小為 m x n 的矩陣 mat ,請以對角線遍歷的順序,用一個數組返回這個矩陣中的所有元素。
示例 1: 輸入:mat = [[1,2,3],[4,5,6],[7,8,9]] 輸入:mat = [[1,2],[3,4]] 提示: m == mat.length |
最長公共前綴
編寫一個函數來查找字符串數組中的最長公共前綴。 如果不存在公共前綴,返回空字符串 ""。
示例 1: 輸入:strs = ["flower","flow","flight"] 輸入:strs = ["dog","racecar","car"] 提示: 1 <= strs.length <= 200 |
最長回文子串
給你一個字符串 s,找到 s 中最長的回文子串。
示例 1: 輸入:s = "babad" 輸入:s = "cbbd" 輸入:s = "a" 輸入:s = "ac" 提示: 1 <= s.length <= 1000 |
翻轉字符串里的單詞
給你一個字符串 s ,逐個翻轉字符串中的所有 單詞 。 單詞 是由非空格字符組成的字符串。s 中使用至少一個空格將字符串中的 單詞 分隔開。 請你返回一個翻轉 s 中單詞順序並用單個空格相連的字符串。 說明: 輸入字符串 s 可以在前面、后面或者單詞間包含多余的空格。 示例 1: 輸入:s = "the sky is blue" 輸入:s = " hello world " 輸入:s = "a good example" 輸入:s = " Bob Loves Alice " 輸入:s = "Alice does not even like bob" 提示: 1 <= s.length <= 104 進階: 請嘗試使用 O(1) 額外空間復雜度的原地解法。 |
實現strStr()
實現 strStr() 函數。 給你兩個字符串 haystack 和 needle ,請你在 haystack 字符串中找出 needle 字符串出現的第一個位置(下標從 0 開始)。如果不存在,則返回 -1 。
說明: 當 needle 是空字符串時,我們應當返回什么值呢?這是一個在面試中很好的問題。 對於本題而言,當 needle 是空字符串時我們應當返回 0 。這與 C 語言的 strstr() 以及 Java 的 indexOf() 定義相符。
示例 1: 輸入:haystack = "hello", needle = "ll" 輸入:haystack = "aaaaa", needle = "bba" 輸入:haystack = "", needle = "" 提示: 0 <= haystack.length, needle.length <= 5 * 104 |
反轉字符串
編寫一個函數,其作用是將輸入的字符串反轉過來。輸入字符串以字符數組 s 的形式給出。 不要給另外的數組分配額外的空間,你必須原地修改輸入數組、使用 O(1) 的額外空間解決這一問題。
示例 1: 輸入:s = ["h","e","l","l","o"] 輸入:s = ["H","a","n","n","a","h"] |
數組拆分I
給定長度為 2n 的整數數組 nums ,你的任務是將這些數分成 n 對, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得從 1 到 n 的 min(ai, bi) 總和最大。 返回該 最大總和 。
示例 1: 輸入:nums = [1,4,3,2] 輸入:nums = [6,2,6,5,1,2] |
兩數之和II-輸入有序數組
給定一個已按照 非遞減順序排列 的整數數組 numbers ,請你從數組中找出兩個數滿足相加之和等於目標數 target 。 函數應該以長度為 2 的整數數組的形式返回這兩個數的下標值。numbers 的下標 從 1 開始計數 ,所以答案數組應當滿足 1 <= answer[0] < answer[1] <= numbers.length 。 你可以假設每個輸入 只對應唯一的答案 ,而且你 不可以 重復使用相同的元素。 輸入:numbers = [2,7,11,15], target = 9 輸入:numbers = [2,3,4], target = 6 輸入:numbers = [-1,0], target = -1 提示: 2 <= numbers.length <= 3 * 104 |
移出元素
給你一個數組 nums 和一個值 val,你需要 原地 移除所有數值等於 val 的元素,並返回移除后數組的新長度。 不要使用額外的數組空間,你必須僅使用 O(1) 額外空間並 原地 修改輸入數組。 元素的順序可以改變。你不需要考慮數組中超出新長度后面的元素。
說明: 為什么返回數值是整數,但輸出的答案是數組呢? 請注意,輸入數組是以「引用」方式傳遞的,這意味着在函數里修改輸入數組對於調用者是可見的。 你可以想象內部操作如下: // nums 是以“引用”方式傳遞的。也就是說,不對實參作任何拷貝 // 在函數里修改輸入數組對於調用者是可見的。 示例 1: 輸入:nums = [3,2,2,3], val = 3 輸入:nums = [0,1,2,2,3,0,4,2], val = 2 |
最大連續1的個數
給定一個二進制數組, 計算其中最大連續 1 的個數。
示例: 輸入:[1,1,0,1,1,1] 提示: 輸入的數組只包含 0 和 1 。 |
長度最小的子數組
給定一個含有 n 個正整數的數組和一個正整數 target 。 找出該數組中滿足其和 ≥ target 的長度最小的 連續子數組 [numsl, numsl+1, ..., numsr-1, numsr] ,並返回其長度。如果不存在符合條件的子數組,返回 0 。
示例 1: 輸入:target = 7, nums = [2,3,1,2,4,3] 輸入:target = 4, nums = [1,4,4] 輸入:target = 11, nums = [1,1,1,1,1,1,1,1] 提示: 1 <= target <= 109 |
楊輝三角
給定一個非負整數 numRows,生成「楊輝三角」的前 numRows 行。 在「楊輝三角」中,每個數是它左上方和右上方的數的和。 示例 1: 輸入: numRows = 5 輸入: numRows = 1 提示:
|
楊輝三角II
在「楊輝三角」中,每個數是它左上方和右上方的數的和。
示例 1: 輸入: rowIndex = 3 輸入: rowIndex = 0 輸入: rowIndex = 1 提示: 0 <= rowIndex <= 33 進階: 你可以優化你的算法到 O(rowIndex) 空間復雜度嗎? |
反轉字符串中的單詞III
給定一個字符串,你需要反轉字符串中每個單詞的字符順序,同時仍保留空格和單詞的初始順序。
示例: 輸入:"Let's take LeetCode contest" 提示: 在字符串中,每個單詞由單個空格分隔,並且字符串中不會有任何額外的空格。 |
尋找旋轉排序數組中的最小值
已知一個長度為 n 的數組,預先按照升序排列,經由 1 到 n 次 旋轉 后,得到輸入數組。例如,原數組 nums = [0,1,2,4,5,6,7] 在變化后可能得到: 給你一個元素值 互不相同 的數組 nums ,它原來是一個升序排列的數組,並按上述情形進行了多次旋轉。請你找出並返回數組中的 最小元素 。
示例 1: 輸入:nums = [3,4,5,1,2] 輸入:nums = [4,5,6,7,0,1,2] 輸入:nums = [11,13,15,17] 提示: n == nums.length |
刪除排序數組中的重復項
給你一個有序數組 nums ,請你 原地 刪除重復出現的元素,使每個元素 只出現一次 ,返回刪除后數組的新長度。 不要使用額外的數組空間,你必須在 原地 修改輸入數組 並在使用 O(1) 額外空間的條件下完成。
說明: 為什么返回數值是整數,但輸出的答案是數組呢? 請注意,輸入數組是以「引用」方式傳遞的,這意味着在函數里修改輸入數組對於調用者是可見的。 你可以想象內部操作如下: // nums 是以“引用”方式傳遞的。也就是說,不對實參做任何拷貝 // 在函數里修改輸入數組對於調用者是可見的。 輸入:nums = [1,1,2] 輸入:nums = [0,0,1,1,1,2,2,3,3,4] 提示: 0 <= nums.length <= 3 * 104 |
移動零
給定一個數組 nums,編寫一個函數將所有 0 移動到數組的末尾,同時保持非零元素的相對順序。 示例: 輸入: [0,1,0,3,12] 必須在原數組上操作,不能拷貝額外的數組。 |