java日記-2018-04-24

怎么港,前幾天內(nèi)推電面了美團(tuán)跟阿里的開(kāi)發(fā)測(cè)試,我想象的應(yīng)該是重點(diǎn)問(wèn)質(zhì)量保障,簡(jiǎn)單問(wèn)問(wèn)java知識(shí)就行了,實(shí)際是大大的丟臉。后邊跟人了解了一下,當(dāng)前沒(méi)有專(zhuān)職測(cè)試,都是開(kāi)發(fā)自測(cè),開(kāi)發(fā)測(cè)試幫助開(kāi)發(fā)進(jìn)行質(zhì)量保障,對(duì)java的要求跟開(kāi)發(fā)一樣 一樣的?;ヂ?lián)網(wǎng)果然跟我狼廠不一樣,雖然我狼廠也一直在進(jìn)步,但是還是差距蠻大。知恥而后勇吧,先把題目刷起來(lái)。


刷題思路,先劍指offer刷完,接著是leetcode,零散時(shí)間補(bǔ)充其他知識(shí)。原因是最欠缺動(dòng)手能力。先把題目刷起來(lái);


今天第一刷,單例模式,單例模式很多,從最簡(jiǎn)單的角度考慮,不學(xué)習(xí)太多,先學(xué)習(xí)靜態(tài)內(nèi)部類(lèi)方法的實(shí)現(xiàn),靜態(tài)內(nèi)部類(lèi)不會(huì)在單例加載時(shí)就加載,而是在調(diào)用getInstance()方法時(shí)才進(jìn)行加載,達(dá)到了類(lèi)似懶漢模式的效果,而這種方法又是線程安全的。

public ?class Singleton {

private static class SingletonHolder {

private static ?Singleton instance = new Singleton();

? }

public?Singleton getinstance() {

return SingletonHolder.instance;

}

}


今天第二題數(shù)組中重復(fù)的數(shù)字

解題思路,以(2, 3, 1, 0, 2, 5) 為例,先把數(shù)組第一個(gè)值2跟自己的下標(biāo)0比較不相等,那么2與1相比較(1的下標(biāo)是2),兩者不相等然后交換位置,變成了1 3 2 0 2 5。

然后比較1與自己的下標(biāo)0不相等,那么1與3比較(3的下標(biāo)是1),不相等交換位置變成3,1,2,0,2,5

然后3與自己的下標(biāo)0 不相等,那么3根0比較(0的下標(biāo)是3),不相等于是交換成0,1,2,3,2,5。

再次比較0 根 0的下標(biāo)發(fā)現(xiàn)相等,比較1根1的下標(biāo)也相等,同理 2 3都相等,第五個(gè)下標(biāo)是2不相等,而此時(shí)下標(biāo)2 的地方已經(jīng)存在2了,那么此時(shí)就找到重復(fù)值了

package com.lyc.dataautest;

public class Duplicate {

public static void swap(int[] num,int i,int j) {

int t = num[i];

num[i] = num[j];

num[j] = t;

}

public static boolean duplicate(int[] num) {

if(num==null) return false;

System.out.println("length is:"+num.length);

for(int i=0;?;i++) {

while(num[i]!=num[num[i]] && num[i] != i) {

swap(num,i,num[i]);

}

if(num[i] == num[num[i]] && num[i] != i) {

System.out.println("i is:"+num[i]);

return true;

}

}

return false;

}

public static void main(String[] args) {

int[] arr = {2,3,1,0,2,5};

duplicate(arr);

}


第三題 矩形覆蓋的問(wèn)題


我們可以用 2*1 的小矩形橫著或者豎著去覆蓋更大的矩形。請(qǐng)問(wèn)用 n 個(gè) 2*1 的小矩形無(wú)重疊地覆蓋一個(gè) 2*n 的大矩形,總共有多少種方法?

解法參考https://www.cnblogs.com/csbdong/p/5689674.html?




解釋一下算法如果有n個(gè)矩形,如果第一步選擇豎著放置2*1的矩形,其實(shí)圖形沒(méi)有變化,剩下2*(n-1)個(gè)方法。如果選擇橫著放,顯然啊第二個(gè)也必須橫著放,那么就剩下2*(n-2)個(gè)算法,于是問(wèn)題就變成了菲波齊納算法?f(n-1) + f(n-2) = f(n)

public int RectCover(int n) {

? ? if (n <= 2) return n;

? ? int pre2 = 1, pre1 = 2;

? ? int result = 0;

? ? for (int i = 3; i <= n; i++) {

? ? ? ? result = pre2 + pre1;

? ? ? ? pre2 = pre1;

? ? ? ? pre1 = result;

? ? }

? ? return result;

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容