字典序排序就是按照英文字典的排序算法,好比12345排在12354前面算法
假設數組中最常字符串的長度爲s,則時間複雜度爲o(s*nlgn)數組
若是想在1s內解決問題的話數據結構
時間複雜度 | 須要時間 |
---|---|
O(n*n) | 10^4 |
O(n) | 10^8 |
O(nlgn) | 10^7 |
是指開的出來用於輔助算法的空間,不算自己數據的存儲。 遞歸的時間複雜度是疊加的。函數
給定一個數組 nums,編寫一個函數將全部 0 移動到數組的末尾,同時保持非零元素的相對順序。spa
示例設計
輸入: [0,1,0,3,12]
輸出: [1,3,12,0,0]
複製代碼
說明指針
使用雙指針進行移動,不斷的移動指針,進行求解。code
給定一個包含紅色、白色和藍色,一共n個元素的數組,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色、白色、藍色順序排列。排序
此題中,咱們使用整數 0、1 和 2 分別表示紅色、白色和藍色。遞歸
注意: 不能使用代碼庫中的排序函數來解決這道題
示例
輸入: [2,0,2,1,1,0]
輸出: [0,0,1,1,2,2]
複製代碼
說明
數組分紅三部分,也就是三路快排。
給定一個已按照升序排列的有序數組,找到兩個數使得它們相加之和等於目標數。函數應該返回這兩個下標值 index1 和 index2,其中 index1必須小於index2。
示例
輸入: numbers = [2, 7, 11, 15], target = 9
輸出: [1,2]
解釋: 2 與 7 之和等於目標數 9 。所以 index1 = 1, index2 = 2 。
複製代碼
說明
利用排序,兩路指着進行對撞。
給定一個含有 n 個正整數的數組和一個正整數 s ,找出該數組中知足其和 ≥s的長度最小的連續子數組。若是不存在符合條件的連續子數組,返回 0。
示例
輸入: s = 7, nums = [2,3,1,2,4,3]
輸出: 2
解釋: 子數組 [4,3] 是該條件下的長度最小的連續子數組。 。
複製代碼
說明
也是利用雙路索引
給定四個包含整數的數組列表A , B , C , D ,計算有多少個元組 (i, j, k, l),使得A[i] + B[j] + C[k] + D[l] = 0。
爲了使問題簡單化,全部的 A, B, C, D 具備相同的長度N,且 0 ≤ N ≤ 500 。全部整數的範圍在 -228 到 228 - 1 之間,最終結果不會超過231 - 1 。
示例
輸入:
A = [ 1, 2]
B = [-2,-1]
C = [-1, 2]
D = [ 0, 2]
輸出:
2
解釋:
兩個元組以下:
1. (0, 0, 0, 1) -> A[0] + B[0] + C[0] + D[1] = 1 + (-2) + (-1) + 2 = 0
2. (1, 1, 0, 0) -> A[1] + B[1] + C[0] + D[0] = 2 + (-1) + (-1) + 0 = 0
複製代碼
根據數據規模爲500,能夠設計一個O(N^2)的算法,遍歷a和b數組,而後再遍歷c和d數組,把c和d數組的和放到一個查找表中e中,而後在e中查找。
遞歸最合適的數據結構就是遞歸。
你是一個專業的小偷,計劃偷竊沿街的房屋。每間房內都藏有必定的現金,影響你偷竊的惟一制約因素就是相鄰的房屋裝有相互連通的防盜系統,若是兩間相鄰的房屋在同一夜被小偷闖入,系統會自動報警。
給定一個表明每一個房屋存放金額的非負整數數組,計算你在不觸動警報裝置的狀況下,可以偷竊到的最高金額。
示例
輸入: [1,2,3,1]
輸出: 4
解釋: 偷竊 1 號房屋 (金額 = 1) ,而後偷竊 3 號房屋 (金額 = 3)。
偷竊到的最高金額 = 1 + 3 = 4 。
輸入: [2,7,9,3,1]
輸出: 12
解釋: 偷竊 1 號房屋 (金額 = 2), 偷竊 3 號房屋 (金額 = 9),接着偷竊 5 號房屋 (金額 = 1)。
偷竊到的最高金額 = 2 + 9 + 1 = 12 。
複製代碼
使用動態規劃
若是選擇了貪心,不會影響剩下的貪心影響後面的選擇