##一、階乘問題:
階乘結果 從個位到倒數 連續為零的個數:
首先想到零是怎麼出現的10的倍數相乘即可,即 (5*2)*n n為任意的數。
1、2 只要是偶數 都包含2.而包括5的只存在位數為0或者5的數裡面
2、所有2的個數 遠遠多於5的個數,故只要統計五的個數
3、每加乙個五,數字就多乙個5,減少乘法運算。
需要消耗o(1)的空間和o(n/5)的時間
##三、交錯合併陣列public void countzero(int n)
public int sum2(int k)
public int sum3(int k, int m)
return k[m] + sum3(k, m + 1);
}
編寫乙個交錯合併列表元素的函式。例如:給定的兩個列表為[a,b,c]和[1,2,3],函式返回[a,1,b,2,c,3]。
有點類似於歸併排序,合併兩個陣列。這裡面使用交錯排序。
第一步:按照最短的數 完成2*min(length)長度,
第二步:再將剩餘的數copy進餘下的空間
(第二步 在陣列相等長度的時候 忽略)
public int merge(int arr1, int arr2)
算到第94個的時候,資料越界了。沒辦法8個位元組的long都不夠用。該方法走不通。
####4.2.2、使用bigdecimal方法計算:第91個值是: 4660046610375530309
第92個值是: 7540113804746346429
第93個值是: -6246583658587674878
第94個值是: 1293530146158671551
結果是:public string f()
public string add(string a, string b)
花費時間 7ms
####4.2.3使用biginteger第90個值是: 618970019642690137449562112
第91個值是: 1237940039285380274899124224
第92個值是: 2475880078570760549798248448
第93個值是: 4951760157141521099596496896
第94個值是: 9903520314283042199192993792
第95個值是: 19807040628566084398385987584
第96個值是: 39614081257132168796771975168
第97個值是: 79228162514264337593543950336
第98個值是: 158456325028528675187087900672
第99個值是: 316912650057057350374175801344
public biginteger f2()
時間是3ms
###4.2 擴充套件–計算第幾位的斐波拉契數
####1、暴力演算法,使用上面的演算法,列印第幾次的結果
時間複雜度是 o(n),空間複雜度是o(1)
####2、 簡化演算法:
前幾位斐波拉契數:0 1 1 2 3 5 8…
當n大於2的時候,第n位數等於第n-1位+第n-2位之和。
第一種思路:使用遞迴演算法 計算出
時間複雜度是o(n),空間複雜度時o(2*n)
function a(n)
####第二種演算法:
(1 ,0) *()=(3,1)
(3 ,1) *()=(5, 3) (1 ,0) ()()=(5, 3)
…以此類推,只要計算出()裡面的數,就可以用公式一步計算出最終的結果。
很容易的使用行列式(不會的可以看看線性代數 )就計算出()={{1,1},{1,0}}
劃分計算模組
n<3直接得出結果
n>2
1、行列式冪次方的計算方法
2、冪次方的結果乘以(1,0)即可得到(f[n],f[n-1]) (n>2)
##五、組建最大的數
編寫乙個能將給定非負整數列表中的數字排列成最大數字的函式。例如,給定[50,2,1,9],最大數字為95021。
此處最大突破點就是比較兩個數 順序 導致結果變化,(前+後 ).compareto(後+前)
public void co(string a)
}} stringbuffer sb=new stringbuffer();
for(int i=0;i##六、算出指定的數
編寫乙個在1,2,…,9(順序不能變)數字之間插入+或-或什麼都不插入,使得計算結果總是100的程式,並輸出所有的可能性。例如:1 + 2 + 34 – 5 + 67 – 8 + 9 = 100。
###1、暴力演算法,窮舉
/*** 採取窮舉的方法,測試是否符合條件
*/@test
public void aa() ;
byte b = new byte[8];
string res = "";
for (int i = 0; i < 6561; i++)
addby3(b);
} }/**
* * @param b
* 數字字符集
* @param c
* 數字之間的操作可能
* @return 等於100的操作的四則運算
*/public string getres(byte b, byte c) else if (b[j] == 1) else if (b[j] == 2)
} // 記錄本次操作的情況
stringbuilder sb = new stringbuilder();
// 因為最大結果是9位數 超出int
biginteger sum = new biginteger(list.get(0));
// 計算
for (int j = 0; j < opeator.size(); j++) else if (opeator.get(j).equals("-")) else
} string s = sum.tostring();
if ("100".equals(s))
return sb.tostring();
else
return null;
} /**
* 三進製加法,滿2 清零 進一;最長為8位數
* * @param c
*/public void addby3(byte c) else
} }
123+45-67+8-9
123+4-5+67-89
123-45-67+89
123-4-5-6-7+8-9
12+3+4+5-6-7+89
12+3-4+5+67+8+9
12-3-4+5-6+7+89
1+23-4+56+7+8+9
1+23-4+5+6+78-9
1+2+34-5+67-8+9
1+2+3-4+5+6+78+9
運算時間43 毫秒
演算法工程師面試準備
貝葉斯 nb 神經網路 svm 概率圖模型 特徵選擇 其他 梯度下降的優缺點 降取樣,pca,lda pca的基於特徵值壓縮的方法 基於isolation forest識別的方法 梯度下降的優缺點 常見損失函式 bagging 和 boosting的區別 為什麼用最小二乘而不是最小四乘 gb和牛頓法...
面試總結 Java高階工程師(一)
不知道是不是職位原因還是沒遇到,面試時,都不需要做筆試題,而是填張個人資訊 或者直接面試 1 spring 事務的隔離性,並說說每個隔離性的區別 解答 spring事務詳解 2 spring事務的傳播行為,並說說每個傳播行為的區別 解答 spring事務詳解 3 hibernate跟mybatis ...
面試總結 Java高階工程師(一)
不知道是不是職位原因還是沒遇到,面試時,都不需要做筆試題,而是填張個人資訊 或者直接面試 1 spring 事務的隔離性,並說說每個隔離性的區別 解答 spring事務詳解 2 spring事務的傳播行為,並說說每個傳播行為的區別 解答 spring事務詳解 3 hibernate跟mybatis ...