算法與數據結構面試

對數組中包含n個字符串進行字典序排序

字典序排序就是按照英文字典的排序算法,好比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]
複製代碼

說明指針

  • 1,必須在原數組上操做,不能拷貝額外的數組。
  • 2,儘可能減小操做次數。

思路

使用雙指針進行移動,不斷的移動指針,進行求解。code

顏色分類

給定一個包含紅色、白色和藍色,一共n個元素的數組,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色、白色、藍色順序排列。排序

此題中,咱們使用整數 0、1 和 2 分別表示紅色、白色和藍色。遞歸

注意: 不能使用代碼庫中的排序函數來解決這道題

示例

輸入: [2,0,2,1,1,0]
輸出: [0,0,1,1,2,2]
複製代碼

說明

  • 1,一個直觀的解決方案是使用計數排序的兩趟掃描算法。 首先,迭代計算出0、1 和2元素的個數,而後按照0、一、2的排序,重寫當前數組。
  • 2,你能想出一個僅使用常數空間的一趟掃描算法嗎?。

思路

數組分紅三部分,也就是三路快排。

兩數之和 II - 輸入有序數組

給定一個已按照升序排列的有序數組,找到兩個數使得它們相加之和等於目標數。函數應該返回這兩個下標值 index1 和 index2,其中 index1必須小於index2。

示例

輸入: numbers = [2, 7, 11, 15], target = 9
輸出: [1,2]
解釋: 27 之和等於目標數 9 。所以 index1 = 1, index2 = 2複製代碼

說明

  • 1, 返回的下標值(index1 和 index2)不是從零開始的。
  • 2, 你能夠假設每一個輸入只對應惟一的答案,並且你不能夠重複使用相同的元素。

思路

利用排序,兩路指着進行對撞。

兩數之和 II - 輸入有序數組

給定一個含有 n 個正整數的數組和一個正整數 s ,找出該數組中知足其和 ≥s的長度最小的連續子數組。若是不存在符合條件的連續子數組,返回 0。

示例

輸入: s = 7, nums = [2,3,1,2,4,3]
輸出: 2
解釋: 子數組 [4,3] 是該條件下的長度最小的連續子數組。 。
複製代碼

說明

  • 1, 若是你已經完成了O(n) 時間複雜度的解法,

思路

也是利用雙路索引

454. 四數相加 II

給定四個包含整數的數組列表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複製代碼

思路

使用動態規劃

貪心選擇性質

若是選擇了貪心,不會影響剩下的貪心影響後面的選擇

相關文章
相關標籤/搜索