? 最近沒有來寫了,忙著考研啊,日子再也沒有以前輕松了,技術(shù)學(xué)的時(shí)間也不是很多了,只有自己有空的時(shí)候隨便摸
索一下了。
? 這次來回憶一下JAVA 中的算法,對(duì)于一個(gè)算法的好壞,我覺著這是一個(gè)比較值得注意的地方,評(píng)價(jià)一個(gè)算法要從多方
面去考慮,主要從以下幾個(gè)方面去考慮:
n 1.正確性(結(jié)果要正確,注意邊界值)
2.結(jié)構(gòu)性(每一塊空兩格或四格)
3.可讀性(命名合理,書寫規(guī)范,表達(dá)式不要太 復(fù)雜,要有注釋)
4.時(shí)間復(fù)雜度(盡量低,注意循環(huán)語(yǔ)句)
5.空間復(fù)雜度(盡量低,注意變量的使用)
?? 接下來就是幾個(gè)常見的算法了,別以為這些都很簡(jiǎn)單,有時(shí)候去公司面試時(shí),考官通常會(huì)給你一個(gè)很簡(jiǎn)單的問題,但
是就是這個(gè)問題卻恰恰能夠反映出你的編程思想。我在一個(gè)網(wǎng)站看到這么一個(gè)問題:
? 打印1到100,其中遇到3的倍數(shù)打印TT,遇到5的倍數(shù)打印HH,既是3又是5的倍數(shù)打印TTFF。
這個(gè)很簡(jiǎn)單吧,但是真正到了考場(chǎng)上并不一定就能很快的想出來。
?下面簡(jiǎn)單介紹一下算法:
?1.枚舉算法,也叫 “ 窮舉法 ” ,使用很廣泛。基本思想是將所有可能的解都列舉出來,然后代入進(jìn)行演算,符合條
件的解,即為所求的結(jié)果。
2.遞推和迭代算法常用在數(shù)列問題中。關(guān)鍵是找到公式,公式找到 了,程序很容易實(shí)現(xiàn)。
3. 遞歸就是把函數(shù)或過程不斷地自我調(diào)用。遞歸在解決某些問題中,可以使某些看起來不易解決的問題容易解決,寫出
的程序較簡(jiǎn)短。但是 遞歸也有自身的缺點(diǎn),運(yùn)行時(shí)間長(zhǎng),占用存儲(chǔ)空間多。
?其他就有高精度算法和進(jìn)制轉(zhuǎn)換的算法了。下面出幾個(gè)問題,各位友人有空的時(shí)候可以做一下吧。
?
1 :有 N(N>=3) 位同學(xué)去照相,每次照三個(gè)同學(xué),共可照出多少 張不全相同的照片?每張照片中都是誰(shuí)?
??? 2:? 買菜問題:小明有 1 元 5 角錢,去菜場(chǎng)買菜,西紅柿 3 分錢 1 斤,黃瓜 5 分錢 1 斤,土豆 7 分錢 1 斤
,問小明把錢全部花完,三 種菜各買幾斤?
3 :有一堆游戲棒,第一個(gè)參加游戲的人取走了一半多一根,第 二個(gè)游戲者再將剩下的取走一半多一根,依此類推,到
第十個(gè) 人來取時(shí),發(fā)現(xiàn)只剩下一根了。問游戲開始前這堆游戲棒共有 多少根。
4 :數(shù)列問題:有一數(shù)列 A(N) 的前幾項(xiàng)是 1,1,2,3,5,8, 13, … ,已 知后一項(xiàng)和前兩項(xiàng)有某種關(guān)系,試編程求出前
15 項(xiàng)的和,并將 這個(gè)數(shù)列輸出。
?? 加油!