Algorithm
本周LeetCode 題目:350. 兩個數組的交集 II
題解思路:首先,將兩個數組進行排序。比較兩個數組的長度,將長度較小的那個放在外層循環,長度較長的放在內層循環,這樣的做法是可以減少檢索的次數,當數組長度相差極大的時候,這種方式的優點就可以凸顯。隨后,進行遍歷獲取交集,假設剛開始的前n次遍歷沒有找到相等的數字,則下次遍歷還會從0索引開始。如果在前n次遍歷中,在第n次遍歷,找到相等項,處理之后結束內層循環,則第n+1次會在第n次的索引i+1 處的地方繼續進行遍歷,這樣得益于排序之后的好處。
題解代碼:
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
個人見解;我自己的主語言是Java,這篇文章表達了許多有關于Kotlin這門編程語言的好處,的確有挺多解決Java語言之前的痛點的(個人基于JDK 8來闡述),比如兩個對象的數據都相等的話,我們在現實生活中就會認為這兩個對象是相等的,而在Java的語法中,在默認的equals方法,因為這兩個對象所存放的內存地址是不同的,所以就會返回false,所以會讓Java程序員重寫了equals方法,但是在Kotlin中提供了==和===比較符,==只要數據相同就會返回true,而===的結果同默認的equals方法。這樣省去了重復性的編碼,但是Kotlin雖然是簡化Java的代碼風格,但是個人感覺語法風格上還是有些別扭,給我的感覺是基于Java和Python中間,Python的語法是真的讓我感覺很簡潔明了。
Tip
本周Tip:在Java中,方法的調用永遠是值調用,而不像C++,Python有引用調用及值調用(基于JDK 8)
Share
最近迷上了一部美劇叫Stranger Things,中文譯名:怪奇物語,非常好看。可以用來學習英語。