怎么港,前幾天內(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;
}