1.自己實現的快速排序
快速排序:
時間複雜度平均o(nlogn),空間複雜度為o(1)
void quicksort(int arr,int length)
int start = 0;
int end = length - 1;
int tmp = arr[start];
while (start != end)
if (end != start)
else//若end直接減到了等於start就說明不必做任何變動
while (arr[start] <= tmp&&startif (end != start)
}arr[start] = tmp;
quicksort(arr, start - 1);
quicksort(arr + start+1,length-start-1);
}
2.旋轉陣列的最小數字
int rotate(int arr, int length)
if (arr[mid]
< arr[end])//表示已經到達了
//第二個序列,這時候分界在前面
if (arr[mid] == arr[start] && mid != start)
if (arr[mid] == arr[end] && mid != end)
}return arr[start];
}
重點同樣需要注意特殊情況比如說
11101
3.關於斐波那契
用迴圈就好了,遞迴效率太低,但是其實有第三種方法把它看成矩陣來計算的,但是不實用,可以記著知道有這個就好了
斐波那契數列的變種題目出法
乙隻青蛙,一次只能跳一級或者兩級台階,那麼它跳上n級台階有多少種方法?
思路如下:
(1)青蛙跳台階,對於1階,只有一種
(2)對於兩階,有兩種
(3)對於三階,可以視作他第一次跳一階,第二次跳兩階,那麼
f(3) = f(2)+f(1)
(4)代入一般情況就可以知曉
f(n) = f(n-1)+f(n-2)
(5)由以上得出這個問題其實考察的也就是斐波那契數列而已(。。。熟練運用啊不要被坑)
還有例如用2*1的小方格2*8的矩形的
劍指offer面試題彙總 演算法和資料操作
面試題11 旋轉陣列最小數字 面試題12 矩陣中的路徑 面試題13 機械人的運動範圍 解題思路 面試題14 剪繩子 面試題15 二進位制中1的個數 求斐波那契數列的第n項。long long fibonacci unsigned int n long long fibonacci unsigned ...
大資料演算法面試題
本文參考並對部分內容進行了整理 1 給定 a b 兩個檔案,各存放 50 億個 url,每個 url 各佔 64 位元組,記憶體限制是 4g,讓你找出 a b 檔案共同的 url?1 可以估計每個檔案安的大小為 50g 64 320g,遠遠大於記憶體限制的 4g。所以不可能將其完全載入到記憶體中處理...
演算法面試題
1 兩個有序的陣列求中位數 時間複雜度o log n m 這個演算法有一定的缺陷,僅做參考 2 如何解決hash衝突 3 調整陣列順序使奇數字於偶數前面 void reorderoddeven int pdata,unsigned int length 4 鍊錶中倒數第k個節點 listnode f...