Algorithm
本周LeetCode 題目:350. 兩個(gè)數(shù)組的交集 II
題解思路:首先娱局,將兩個(gè)數(shù)組進(jìn)行排序郎逃。比較兩個(gè)數(shù)組的長(zhǎng)度肩刃,將長(zhǎng)度較小的那個(gè)放在外層循環(huán),長(zhǎng)度較長(zhǎng)的放在內(nèi)層循環(huán)速缨,這樣的做法是可以減少檢索的次數(shù)锌妻,當(dāng)數(shù)組長(zhǎng)度相差極大的時(shí)候,這種方式的優(yōu)點(diǎn)就可以凸顯旬牲。隨后仿粹,進(jìn)行遍歷獲取交集,假設(shè)剛開始的前n次遍歷沒有找到相等的數(shù)字原茅,則下次遍歷還會(huì)從0索引開始吭历。如果在前n次遍歷中,在第n次遍歷擂橘,找到相等項(xiàng)晌区,處理之后結(jié)束內(nèi)層循環(huán),則第n+1次會(huì)在第n次的索引i+1 處的地方繼續(xù)進(jìn)行遍歷通贞,這樣得益于排序之后的好處朗若。
題解代碼:
class Solution {
public int[] intersect(int[] nums1, int[] nums2) {
Arrays.sort(nums1);
Arrays.sort(nums2);
List<Integer> result = new ArrayList<>();
int start = 0;
if(nums1.length <= nums2.length) {
for (int i = 0; i < nums1.length; i++) {
int find = nums1[i];
for (int j = start; j < nums2.length; j++) {
if (find == nums2[j]) {
result.add(Integer.valueOf(find));
start = j + 1;
break;
}
}
}
} else {
for (int i = 0; i < nums2.length; i++) {
int find = nums2[i];
for (int j = start; j < nums1.length; j++) {
if (find == nums1[j]) {
result.add(Integer.valueOf(find));
start = j + 1;
break;
}
}
}
}
int[] nums3 = new int[result.size()];
for (int i = 0; i < result.size(); i++) {
nums3[i] = result.get(i);
}
return nums3;
}
}
Review
本周文章:Why you should totally switch to Kotlin
個(gè)人見解;我自己的主語言是Java昌罩,這篇文章表達(dá)了許多有關(guān)于Kotlin這門編程語言的好處哭懈,的確有挺多解決Java語言之前的痛點(diǎn)的(個(gè)人基于JDK 8來闡述),比如兩個(gè)對(duì)象的數(shù)據(jù)都相等的話茎用,我們?cè)诂F(xiàn)實(shí)生活中就會(huì)認(rèn)為這兩個(gè)對(duì)象是相等的遣总,而在Java的語法中,在默認(rèn)的equals方法轨功,因?yàn)檫@兩個(gè)對(duì)象所存放的內(nèi)存地址是不同的旭斥,所以就會(huì)返回false,所以會(huì)讓Java程序員重寫了equals方法夯辖,但是在Kotlin中提供了==和===比較符琉预,==只要數(shù)據(jù)相同就會(huì)返回true董饰,而===的結(jié)果同默認(rèn)的equals方法蒿褂。這樣省去了重復(fù)性的編碼圆米,但是Kotlin雖然是簡(jiǎn)化Java的代碼風(fēng)格,但是個(gè)人感覺語法風(fēng)格上還是有些別扭啄栓,給我的感覺是基于Java和Python中間娄帖,Python的語法是真的讓我感覺很簡(jiǎn)潔明了。
Tip
本周Tip:在Java中昙楚,方法的調(diào)用永遠(yuǎn)是值調(diào)用近速,而不像C++,Python有引用調(diào)用及值調(diào)用(基于JDK 8)
Share
最近迷上了一部美劇叫Stranger Things堪旧,中文譯名:怪奇物語削葱,非常好看〈久危可以用來學(xué)習(xí)英語析砸。